Этот код работает по своему усмотрению в большинстве случаев, что должно побуждать пользователя к одному символу, выполнять связанное действие, предлагать пользователю нажать return и повторить. Однако, когда я ввожу^D (EOF) в приглашении, возникает бесконечный цикл. Я очищаю состояние ошибки через std :: cin.clear() и вызываю std :: cin.ignore (...), чтобы очистить буфер. Что может вызвать бесконечный цикл?Бесконечный цикл на EOF в C++
#include <iostream>
#include <limits>
void wait()
{
std::cout << std::endl << "press enter to continue.";
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::cin.clear();
std::cin.get();
}
int main()
{
char response;
while (true)
{
std::cout << "enter a character at the prompt." << std::endl << "> ";
std::cin >> response;
switch (response)
{
case 'q':
exit(0);
break;
}
wait();
}
}
Я запускаю это в терминале Mac OS X, если это имеет значение.
UPDATE: То, что я действительно спрашиваю здесь, , когда пользователь вводит EOF (^ D) в командной строке, как я (а) обнаружить и (б) сброс потока так что пользователь может продолжать вводить данные.
Следующий пример отличается от кода выше, но иллюстрирует тот же принцип очистки потока после того, как^D был обнаружен и продолжает читать из этого потока.
> a you entered: a > b you entered: b > ^D you entered EOF > c you entered: c ...
Вы уверены, что это замкнутая петля? Пока нет - для заявлений в вашем коде. Вы отлаживали это? – Tom
спасибо, Том. У меня есть цикл в моем коде, но я забыл включить его в этот фрагмент. – titaniumdecoy
while (true) вызывает бесконечный цикл. – okutane