这段代码大部分情况下是按预期工作的,即提示用户输入单个字符,执行相关操作,提示用户按回车键并重复。然而,当我在提示符处输入^D(EOF)时,会发生无限循环。我通过std::cin.clear()清除了错误状态,并调用std::cin.ignore(...)来清除缓冲区。可能是什么原因导致了无限循环?
#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终端中运行此程序,如果这很重要的话。
更新:我真正想问的是,在用户在提示符处输入EOF (^D)时,如何(a)检测它和(b)重置流,以便用户可以继续输入数据。 以下示例与上面的代码不同,但说明了在检测到^D后清除流并继续从该流读取的相同原理。
> a 您输入:a > b 您输入:b > ^D 您输入了EOF > c 您输入:c ...