简单的C++代码给出错误的答案
Simple C++ Code giving wrong answers
如果我按顺序输入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;
}
现在,您可以轻松找出正在执行的函数,并可以相应地提供输入。
相关文章:
- 递归求和任务的错误答案
- 为什么我在代码厨师的 CMPRSS 问题中得到 WA(错误答案)?
- 请找出我的代码中的错误,它在提交得到错误答案的同时仍然适用于我的所有测试用例
- 寻找最小楼梯成本的动态规划问题的错误答案
- 为什么可变大小的数组会导致Codechef出现错误答案
- 如何修复此代码对几个测试用例的错误答案?
- 使用幂函数的计算给出了大数字的错误答案
- 快速排序算法,一些特定输入序列的错误答案和分段错误
- 二分法程序的错误答案(C++)
- 无法理解绘图程序中的错误答案
- C++ - 整数除以整数返回错误答案
- 布尔函数的错误答案
- SPOJ FASTFLOW上的错误答案
- 代码的错误答案是在Java Camel案件和C 下划线标识符之间转换的错误答案
- 200万以下所有素数的总和,线程给出错误答案
- 0-1整数背包返回错误答案(动态编程)
- UVa 在线判断 - 3n + 1 - 错误答案
- 提升C++原始算法错误答案
- 二项式系数函数C++错误答案 n>13
- 需要帮助以避免 SPOJ 上的"错误答案"