Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 简单C++;给出错误答案的代码_C++ - Fatal编程技术网

C++ 简单C++;给出错误答案的代码

C++ 简单C++;给出错误答案的代码,c++,C++,如果我按顺序输入299399,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 >

如果我按顺序输入299399,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;
}
#包括“stdafx.h”
#包括
整数相加(整数x,整数y)
{
int a=x-y;
返回a;
}
整数x(整数a)
{
标准:cin>>a;
返回a;
}
整数y(整数a)
{
标准:cin>>a;
返回a;
}
int main()
{
INTA;
int b;
标准:cin>>a;
标准:cin>>b;

std::cout编译器可以随意调用x(a)和y(b)的任意顺序。如果您编写以下代码:

int c = x(a);
int d = y(b);
std::cout << add(c, d);  
intc=x(a);
int d=y(b);

std::cout因为x=5和y=10,所以5-10=-5

在你的问题中,第一个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;
}
intadd(intx,inty)
{
语句中的std::cout

std::cout << add(x(a), y(b));
还有一些问题,如
x()
y()
不使用从调用方传递的值。除非它们是函数需要的其他内容的占位符,否则调用方没有理由必须传递它们


并具有名为
add()的函数
做减法……用肥皂漱口。

这并不能真正回答问题。非常感谢!我假设编译器会在函数的参数列表中从左到右执行。现在我知道正好相反!注意:这个答案是错误的。这是随机顺序。你的意思是顺序取决于参数列表编译器的d?我做了几个测试,每次我的编译器在函数的参数列表中从右向左调用。谢谢!我假设x()首先调用。因为我认为编译器将在函数的参数列表中从左到右执行。我做了一个测试,结果正好相反。编译器从右到左执行!!!是的,add()应该执行add…它是“刚好相反”使用编译器。但不要编写依赖于此的代码。实际顺序由实现定义,这意味着不同的实现可以选择不同的顺序。其他编译器也可以。谢谢您的建议!“实现定义”,第一次听到这个。但是现在我知道我必须告诉编译器调用函数的确切顺序。很好!!当我键入我的回复时我很累,并且这个注释很快就会更正。函数参数的求值顺序实际上是未指定的,而不是实现定义的。术语“未定义”、“未指定”、“实现定义”在C++标准中有特定含义(以及C标准)如果你能理解这些内容有助于理解C/C++的几个方面。那就谢谢你给我提建议了。是的,我学习C++有好几天了。每个概念对我来说都是新的,但我发现它很有趣。我正在学习一个学习C++教程:希望可能会有一些进展~~是的,我假设编译器像人一样工作,它会在函数的参数列表中从左到右调用。现在它正好相反!是的,add()应该只做add!非常感谢!
a = x(a);
b = y(b);
std::cout << add(a,b);