【发布时间】:2009-10-21 02:59:42
【问题描述】:
此代码在大多数情况下按预期工作,即提示用户输入单个字符,执行相关操作,提示用户按回车键,然后重复。但是,当我在提示符下输入 ^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 后清除流并继续从该流中读取的相同原理.
>一个 你输入了: > 乙 你输入了:b > ^D 你输入了EOF > c 你输入了:c ...【问题讨论】:
-
你确定它是一个无限循环吗?您的代码中没有 while-for 语句。你调试了吗?
-
谢谢,汤姆。我的代码中有一个循环,但忘记将它包含在这个 sn-p 中。
-
while(true) 导致无限循环。
-
+1。你似乎已经解决了你的问题