我有一个while语句,它不断重复文本而不给用户输入另一个操作值的机会。我究竟做错了什么?它仍然不要求输入。我需要代码一次显示文本,然后请求输入。据推测,如果你键入的东西只有1,它会重复序列。但就目前而言,它只是让你摆脱循环而没有机会纠正行动(截至上一次编辑,见下文。)
int action = 0;
while (action != 1)
{
cout << " No you must look it might be dangerous" << endl;
cin >> action;
}
一个建议是:
while (action != 1)
{
cout << " No you must look it might be dangerous" << endl;
cin >> action;
cin.ignore();
}
仍然会一遍又一遍地产生文字。
while (action != 1)
{
cout << " No you must look it might be dangerous" << endl;
if (!(cin >> action))
// ...problems in the I/O stream...
break;
}
这个没有机会输入新动作就会把你踢出去。
答案 0 :(得分:2)
如果您键入的字符不是空格而不能是整数的一部分,那么您将拥有无限循环。每次尝试输入action
都会导致无效字符失败而不会更改action
中存储的值。
你可以写:
int action = 0;
while (action != 1)
{
cout << " No you must look it might be dangerous" << endl;
if (!(cin >> action))
// ...problems in the I/O stream...
break;
}
这将比连续循环更优雅地处理EOF和字母字符。您可能需要设置一个标志或从函数返回错误条件,或者执行除跳出循环之外的其他操作。请务必检查您的输入是否成功。
您可能还会考虑在循环中输出您在action
中存储的值,以便了解正在发生的事情:
int action = 0;
while (action != 1)
{
cout << " No you must look it might be dangerous" << endl;
if (!(cin >> action))
// ...problems in the I/O stream...
break;
cerr << "Action: " << action << endl;
}
这可能会告诉你一些有用的东西。
请展示一个完整的小程序来说明您的问题 - 一个SSCCE(Short, Self-Contained, Correct Example)。
例如,我正在测试:
#include <iostream>
using namespace std;
int main()
{
int action = 0;
while (action != 1)
{
cout << " No you must look it might be dangerous" << endl;
if (!(cin >> action))
{
// ...problems in the I/O stream...
break;
}
cout << "Action: " << action << endl;
}
cout << "After loop" << endl;
if (!cin)
cout << "cin is bust" << endl;
else
cout << "Action: " << action << endl;
}
这不再是最小的代码 - 循环后的材料只是告诉我发生了什么。但它确实帮助我确保我的代码正在做我期望的事情。
您的等效代码是什么样的,以及您在响应提示时键入了什么内容 - 尤其是在您到达此代码片段之前键入了什么(以及在您到达之前正在进行的其他输入活动) ?