注册 登录
编程论坛 C++教室

新手问题

Soul寂 发布于 2008-10-21 21:31, 585 次点击
在int main()中有:
 if (disc>0)
  {
   greater_than_zero(a,b);
   cout<<"x1="<<x1<<",x2="<<x2<<endl;
  }

在函数:
void greater_than_zero(float a,float b)   
 {
  x1=(-b+sqrt(disc))/(2*a);
  x2=(-b-sqrt(disc))/(2*a);
 }

如果在函数前面加 void表明函数是一个无返回值函数,函数void greater_than_zero(float a,float b) 都不向main返回值,那么cout有怎么能输出x1,x2呢?他是怎么知道x1和x2的值呢?


另外 如果函数不为void类型,而又想向调用他的函数返回不止一个值(两个或者两个以上),该怎么办呢?(用return肯定不行)

[[it] 本帖最后由 Soul寂 于 2008-10-21 21:35 编辑 [/it]]
9 回复
#2
choco10242008-10-21 21:40
因为在主函数内你已经定义了x1,x2,再通过调用void greater_than_zero(float a,float b) 函数,就算是给x1,x2赋值了,所以在主函数中可以输出来。我是新手,不知道这样的解释可以不,请版主指点哈~`
#3
Soul寂2008-10-21 21:43
回复 2# choco1024 的帖子
但是void greater_than_zero(float a,float b)就不返回值给主函数啊!
那么主函数又怎么知道x1和x2的值呢?
#4
choco10242008-10-21 21:46
if (disc>0)
  {
   x1=greater_than_zeroX1(a,b);
   x2=greater_than_zeroX2(a,b);
   cout<<"x1="<<x1<<",x2="<<x2<<endl;
  }

在函数:
float greater_than_zeroX1(float a,float b)   
{
  return (-b+sqrt(disc))/(2*a);
}
float greater_than_zeroX2(float a,float b)
{
  return (-b-sqrt(disc))/(2*a);
}
#5
choco10242008-10-21 21:49
还是请楼主整个代码贴出来吧,我不知道你那x1,x2在哪定义的,我猜你那可能就编译不过去。
#6
zxwangyun2008-10-21 21:53
x1,x2若是全局变量的话,此法可以
#7
Soul寂2008-10-21 21:53
回复 5# choco1024 的帖子
编译通过了,可就是这儿我很困惑,函数void greater_than_zero(float a,float b)向主函数没有返回x1和x2的值,但是主函数还是可以输出x1和x2!
#8
Soul寂2008-10-21 21:58
回复 6# zxwangyun 的帖子
为什么呢?
为什么全局变量就可以?
#9
choco10242008-10-21 22:15
想不到,如果函数内没定义x1,x2的话,会报错undecleared identifier。还是全部代码吧。
#10
newyj2008-10-22 13:16
lz 把代码贴出来 互相学习学习嘛
1