2015-08-12 1 views
0

Я просто пытаюсь выяснить это:Хотя цикл и CIN CHAR, INT

Я следующий код:

#include <iostream> 
using namespace std; 

int main() { 
    int n, x = 0; 
    cin >> n; 
    char s[3]; 

    while (n-- > 0) { 
    cout << n << endl; 
    // cin >> s; 
    } 

    return 0; 
} 

Если я заполняю п с 2, все отлично работает (1 и 0 напечатайте), но если я раскомментирую линию cin >> s;, будет выполнена только первая итерация (1) (и вход будет сохранен в s).

Теперь мой вопрос: почему так работает? И как я могу это исправить? Спасибо заранее.

+0

Работы как ожидалось здесь. Попробуйте запустить его в отладчике. –

+0

Я запустил его по адресу: https://www.codechef.com/ide и с помощью ввода: 2 (newline) X ++ (newline) --X – bryanjhv

+0

@ n.m. Он * может * работать не так, как ожидалось, в зависимости от ввода * s *. Это похоже на переполнение классического буфера, поскольку s - только [3]. –

ответ

0

Помимо бесполезного объявления переменной x, я думаю, что нет ничего плохого в вашем коде.

Если n заполнено 2, результат всегда 1 и 0 печатаются независимо от cin >> s; раскоментирован или нет.

+0

Да, 'x = 0' для последующего использования, поэтому никаких проблем с этим. Кажется, что, как упоминалось ранее, происходит переполнение буфера во входе; все еще пытаясь отладить его. – bryanjhv

+0

Да, я согласен с переполнением буфера, не могу поверить, что я пропустил это :( –

+0

. Была проблема с моим вводом (или способом, которым была использована среда IDE), потому что «freopen» сделал трюк. – bryanjhv