【发布时间】:2020-10-12 00:35:49
【问题描述】:
我是编程新手。这是我的代码的一部分:
double logic(double a,double b)
{
(Code Here...)
}
double inputDouble(double x)
{
std::cout << "Please, input a floating number: ";
std::cin >> x;
std::cout << std::endl;
return x;
}
int main()
{
double a,b;
std::cout << logic(inputDouble(a),inputDouble(b));
return 0;
}
我注意到编译器的问题,我检查了调试窗口,我遇到的问题是,当我通过 'inputDouble' 函数在 'a' 上插入一个值时,它会转到 ' b',反之亦然。所以在程序结束时,我在“逻辑”函数中得到的是:double a=b(From main()),double b=a(From main())。我希望并感谢能够向我解释我做错了什么的人,因此变量被分配到了错误的位置。如果这篇文章有任何语法错误,我也深表歉意,因为英语不是我的第一语言。
【问题讨论】:
-
C++ 不保证计算参数的顺序。因此,当您编写调用
logic(inputDouble(a), inputDouble(b), inputSignal())时,不能保证它会首先计算出inputDouble(a),然后是inputDouble(b),然后是inputSignal()第三个。如果您想强制执行该命令,请在main中执行这些调用,将结果保存到变量中,然后调用logic(a, b, signal)或其他方法。 -
另一个观察结果是
inputDouble实际上并没有使用它的参数,它只是将它用作存储double的一种方式。你可以把它写成double inputDouble(),然后有一个函数局部变量x,就像main中的a和b一样。 (如果您认为inputDouble的效果是将来自cin的输入保存到参数x中,那不是正在发生的事情——查看按值传递和按引用传递。) -
@Nathan Pierson 谢谢你的回答。这当然有助于理解问题以及如何解决它,但是,我在这里遇到的问题是,当我尝试将值 a 和 b 从一个函数传递给另一个函数时,它会颠倒它们的顺序......不是我能做些什么来解决它?如果没有他们,那就太难过了:(
-
@StephenNewell 谢谢你的回答。抱歉,我是一名新程序员,您的链接似乎包含一些高级内容和概念,因此我无法理解。
-
@NathanPierson,哇,它真的有效:O 谢谢你帮助我,这似乎是我的一个逻辑错误。非常感谢
标签: c++