2015-07-19 86 views
1

为晚,我一直在做的C++进行全面审查,并跨越包含一段代码来执行以下操作:给std :: cin while循环给出了一个奇怪的结果

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

的代码片段似乎很简单:它将控制台的输入放入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语句更改我的代码的结果,所以操作装配(尚正)?

+1

你是否真的用调试器完成了这一步? – MrEricSir

回答

3

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

int b = 0; 
+0

甚至更​​好,'int a; int b = 0;' –

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值。