一个非常简单的添加程序的奇怪错误(c ++)

时间:2015-05-24 15:48:30

标签: c++ addition

最近(就在今天)我在c ++中设置了一个简单的程序,从用户那里取两个整数并将它们加在一起。但是,似乎有一个小问题......

该程序分为三个功能,请看一下!

#include <iostream>

void readNumber(int)
{
    int x;
    std::cin >> x;
}

void writeAnswer(int z)
{
    std::cout << z;
}

int main()
{
    using namespace std;

    int x;
    int y;

    cout << "Enter a number(integer): ";
    readNumber(x);

    cout << "Enter another number: ";
    readNumber(y);

    cout << x << "+" << y << "=";
    writeAnswer(x + y);


    return -1522;
}

现在有了这个有趣的部分,无论你设定为x或y的值,这个小程序的结果总是如下:

“4286062 + 2686868 = 6972930”

我会发布截图,但似乎我不能......

我确信问题对你来说非常明显,适当的读者。帮帮我吧...... =)

编辑:感谢大家的帮助,该计划现在像黄油一样工作!

4 个答案:

答案 0 :(得分:1)

readNumber功能中,您希望x功能中的x变量可以看到main的值。但事实并非如此:x(在readNumber中)只有在您退出readNumber之后才会生效。

现在为了使你的代码有效,你应该推动&#39;从xreadNumber的{​​{1}}的值。 为此,您可以定义main以返回int,例如

readNumber

然后在int readNumber() { int i; std::cin >> i; return i; } 中,您可以将其作为main调用。

您的另一个选择是让int x = readNumber();获取reference,这会使您当前的代码正常工作,如您所料:

readNumber

我认为第一种选择在这种情况下更明智。

答案 1 :(得分:0)

readNumber没有做任何事情来传达它读回调用上下文的数字。主函数中的xy根本不会被修改,因此您只需添加未初始化的变量。

答案 2 :(得分:0)

你应该尝试进一步学习C ++,看起来你仍然缺少非常重要的部分。我现在就你当前的问题给我一些解释:

void readNumber(int)
{
    int x;
    std::cin >> x;
}

您应该注意到您有一个未命名的参数(int),因为它没有名称,您无法从函数内部引用它。 int x;是函数内部的一个局部变量,它完全不同,并且与它之外的任何变量无关。

您已经在其他功能中使用了正确的参数(例如void writeAnswer(int z)),因此请更改readNumber。

void readNumber(int x)
{
    std::cin >> x;
}

现在x是您传递给函数的值。如果我们想像在我们的其他函数中那样将它写入输出而不是从输入读取,它将起作用。为什么?默认情况下,C ++传递副本,因此您不会意外地从外部更改您不想更改的值,因此您所做的就是更改在函数离开时被销毁的副本。如果你想改变外部变量,你需要通过引用来传递它,我们通过将int x更改为int& x来实现这一点(x是对int的引用)。

void readNumber(int& x)
{
    std::cin >> x;
}

现在应该可以了。参考文献是C ++的一个重要组成部分,如果你还没有了解它们,你应该进一步阅读你的书或者你用来学习。

答案 3 :(得分:0)

您有两种选择可供选择

  1. 通过函数的返回值

    int readNumber()
    {
      int i;   std :: cin&gt;&gt; I;
      返回i;
    }

  2. 参考

    int readNumber(int&amp; x)
    {
      给std :: cin&GT;&X的催化剂;
    }

  3. 您应该更喜欢基本类型的第一种类型(在这种情况下使用int)。使用参考传递参数会产生某些开销。 因此,通过引用传递的第二种技术应该与非基本类型(类和结构的对象)一起使用。