【问题标题】:Simple C++ calculator always outputs 16简单的 C++ 计算器总是输出 16
【发布时间】:2021-06-15 01:48:38
【问题描述】:

我是编程新手,所以请尽可能写出基本的答案。我用 C++ 做了一个简单的计算器。它应该添加 2 个数字,但由于某种原因,无论数字如何,输出始终为 16。谁可以给我解释一下这个?这是代码:

#include <iostream>

using namespace std;

int main()
{
    int a;
    int b;
    int sum = a + b;

    cout << "Enter a number: ";
    cin >> a;

    cout << "Enter a second number: ";
    cin >> b;

    cout << sum;

    return 0;
}

但是,当我这样做时(首先创建int sum,然后再分配它),它可以工作:

#include <iostream>

using namespace std;

int main()
{
    int a;
    int b;
    int sum;

    cout << "Enter a number: ";
    cin >> a;

    cout << "Enter a second number: ";
    cin >> b;

    sum = a + b;

    cout << sum;

    return 0;
}

【问题讨论】:

  • 订单很重要,正如您所注意到的。语句从上到下执行。因此,当您执行 int sum = a + b 时,a 和 b 的值是indeterminate(使用它们会导致未定义的行为)
  • int a; int b;int sum = a + b; -- C++ 程序自上而下工作。它不会将 a + b 存储为稍后查找的公式。
  • int sum = a + b; 当a 和b 还没有值时,是未定义的行为。不确定你会发生什么。

标签: c++ codeblocks calculator


【解决方案1】:
int sum = a + b;

不是代数规则,它是语句序列中在该点计算的语句。

在你输入之后再做。

【讨论】:

    【解决方案2】:

    在第一个示例中,您在初始化 a 和 b 之前初始化了 sum 变量,因此在初始化之前,a 和 b 将包含一些垃圾值,这就是为什么您重新获得输出 16 垃圾值可以是任何东西。只需在 a 和 b 变量有一些用户输入值之后初始化 sum 变量。

    如果你正在做一些加法,那么最好将你的结果变量(sum)初始化为零sum=0,这样它也不包含任何垃圾值

    【讨论】:

      【解决方案3】:

      当你使用

      int sum = a + b;
      

      sum 初始化为 a + b 的任何计算结果。当您在该语句之后设置a 和b 的值时,sum 的值不会改变。在您的情况下,a 和 b 在该语句之前都没有被初始化。因此,它会导致未定义的行为。

      您的程序的第二个版本可以正常工作,因为您在 a 和 b 已从用户输入分配值之后将 a + b 分配给 sum。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多