Два цикла while (cin >> foo) подряд, как прервать один, но передать на исполнение другой?

Рейтинг: 0Ответов: 1Опубликовано: 22.02.2015

К примеру, код:

while (cin >> foo) cout << " " <<  foo\n;
while (cin >> bar) cout << " " <<  bar\n;

Сначала исполняется первый цикл, он исполняется до тех пор, пока в поток ввода не попадет символ конца строки/файла (Ctrl+D в Unix'ax). Но вот беда: я хочу прервать первый цикл, жму Ctrl+D, и второй цикл завершается тоже, более того, я больше не смогу вывести что-либо из потока ввода во всей программе, т.е. простой cin >> x; не сработает. Символ конца файла/строки остается в потоке до конца программы.

Ответы

▲ 1Принят

Не-не, так не пойдёт.

Ctrl-D — это не символ, который добавляется в поток. Это управляющий код, который завершает весь stdin и не виден во входном потоке. Окружающий мир не знает, что по Ctrl-D надо бы соврать вашему первому циклу, что ввод окончен, и потом продолжать дальнейший ввод.

Придумайте явное условие, по которому вы будете завершать первый цикл. Например, ввод определённого значения.