2015-07-19 3 views
1

В последнее время я делал полный обзор C++ и наткнулся на фрагмент кода, содержащий следующее:станд :: CIN в то время как петля дает странный результат

#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; 
} 

Почему добавление соиЬ заявление изменить результат моего кода так thouroughly (пока положительно)?

+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.