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

时间:2016-02-28 03:19:19

标签: c++

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

4 个答案:

答案 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;
}

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