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

Simple C++ Code giving wrong answers

本文关键字:错误 答案 出错 代码 C++ 简单      更新时间:2023-10-16

如果我按顺序输入299,399,10,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;
}

编译器可以按照它喜欢的任何顺序自由调用 x(a) 和 y(b)。 如果你写这个:

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

它应该有效。

哦,请不要将减法函数命名为"添加"... :)

在语句中

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() 的函数可以减法....用肥皂洗嘴。

因为 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 Functionn";
  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;
}

现在,您可以轻松找出正在执行的函数,并可以相应地提供输入。