【问题标题】:std::cin while loop gives a strange resultstd::cin while 循环给出了一个奇怪的结果
【发布时间】:2015-10-09 00:02:05
【问题描述】:

最近,我一直在对 C++ 进行全面审查,并遇到了一个包含以下内容的代码 sn-p:

#include <iostream>
using namespace std;
int main() 
{
  int a, b;
  while (cin >> a)
  {
    b+=a;
  }
  cout << b << endl;
  return 0;
}

代码 sn-p 看起来非常简单:只要提供有效输入,它将来自控制台的输入放入 a 并将其添加到 b 中。但是,每当我尝试使用以空格分隔的整数输入运行该程序时,它会给出一个非常大的负整数(-1218019327 是最新结果,当整个输入仅包含数字“1”时)。只有当我修改代码时它才会给出正确的输出:

#include <iostream>
using namespace std;
int main() 
{
  int a, b;
  while (cin >> a)
  {
    cout << a << endl;
    b+=a;
  }
  cout << b << endl;
  return 0;
}

为什么添加 cout 语句会如此彻底(但肯定地)改变我的代码结果?

【问题讨论】:

  • 您是否真的用调试器逐步完成了这个?

标签: c++ iostream cin


【解决方案1】:

两个程序都会导致未定义的行为,您没有初始化b。试试:

int b = 0;

【讨论】:

  • 或者更好,int a; int b=0;
【解决方案2】:

你必须初始化b=0;。或者b 会给你垃圾值。

#include <iostream>
using namespace std;
int main() 
{
  int a, b=0;
  while (cin >> a)
  {
    cout << a << endl;
    b+=a;
  }
  cout << b << endl;
  return 0;
}

通过按ctrl-z,您将获得b的值。

【讨论】:

    猜你喜欢
    • 2017-05-19
    • 2013-12-19
    • 2018-12-30
    • 2021-08-13
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    相关资源
    最近更新 更多