如果我按顺序输入299,399,10,5,计算机应该给我一个答案5.但是它给了我-5。为什么不5?这让我很困惑。救命!!
#include "stdafx.h"
#include <iostream>
int add(int x, int y)
{
int a=x-y;
return a;
}
int x(int a)
{
std::cin >> a;
return a;
}
int y(int a)
{
std::cin >> a;
return a;
}
int main()
{
int a;
int b;
std::cin >> a;
std::cin >> b;
std::cout << add(x(a), y(b));
return 0;
}
答案 0 :(得分:6)
编译器可以按照自己喜欢的顺序自由调用x(a)和y(b)。如果你这样写:
int c = x(a);
int d = y(b);
std::cout << add(c, d);
它应该有用。
哦,请不要指定减法功能&#39;添加&#39; ... :)
答案 1 :(得分:1)
声明
std::cout << add(x(a), y(b));
C ++标准未指定调用x(a)
和y(b)
的顺序。这意味着可能会在x()
之前调用y()
,或者可能不会调用x()
。
您假设首先调用y()
。如果首先调用a = x(a);
b = y(b);
std::cout << add(a,b);
,您将获得您看到的结果。编译器无论哪种方式都是正确的(在本例中,标准中基本上是“未指定的”)。
如果这些事情的顺序很重要,您需要通过确保正确的顺序来强制解决问题。例如;
x()
还有一些问题,因为y()
和add()
不使用从调用方传递的值。除非它们是函数需要的其他东西的占位符,否则调用者无需传递它们。
有一个名为 view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-50-[button1(50)]|", options: [], metrics: nil, views: views1))
view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[button1(50)]-50-|", options: [], metrics: nil, views: views1))
的函数可以减法....用肥皂洗脸。
答案 2 :(得分:0)
因为x = 5且y = 10,所以5-10 = -5
答案 3 :(得分:-1)
在你的问题中,首先执行Y(a)函数而不是x(a)函数。因为C / C ++是一个左右可执行函数。每当你在函数内提到函数时 例子c =(X(a),Y(b)); 在这个例子中,首先执行Y(a)函数,然后执行X(a)函数。你的程序是正确的,但需要清楚执行哪个函数。因此,我已更新您的代码,如下所示。
int add(int x, int y)
{
std::cout<<"Executing add function";
std::cout<<"x="<<x<<" y="<<y;
int a=x-y;
return a;
}
int x(int a)
{
std::cout<<"Executing X function";
std::cin >> a;
std::cout <<"X will return "<<a;
return a;
}
int y(int a)
{
std::cout<<"Executing Y Function\n";
std::cin >> a;
std::cout <<"y will return "<<a;
return a;
}
int main()
{
int a;
int b;
std::cin >> a;
std::cin >> b;
std::cout << add(x(a), y(b));
return 0;
}
现在您可以轻松找出正在执行的功能,并可以相应地提供输入。