std :: cin while循环给出了一个奇怪的结果

时间:2015-07-19 22:51:08

标签: c++ iostream cin

最近,我一直在对C ++进行全面审核,并发现了包含以下内容的代码段:

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

代码片段看起来非常简单:它将来自控制台的输入放入a并将其添加到b上,只要有效输入被呈现。但是,每当我尝试使用整数输入运行此程序时,用空格分隔,它会给出一个非常大的负整数(-1218019327是最近的结果,当整个输入只包含数字&#39; 1&# 39)。只有当我修改代码时它才能提供正确的输出:

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

为什么添加一个cout语句会彻底改变我的代码的结果(但却是积极的)?

2 个答案:

答案 0 :(得分:3)

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

int b = 0;

答案 1 :(得分:0)

您必须初始化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的价值。