虽然声明不会停止

时间:2013-07-27 22:29:38

标签: c++ while-loop

我有一个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;
}

这个没有机会输入新动作就会把你踢出去。

1 个答案:

答案 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;
}

这不再是最小的代码 - 循环后的材料只是告诉我发生了什么。但它确实帮助我确保我的代码正在做我期望的事情。

您的等效代码是什么样的,以及您在响应提示时键入了什么内容 - 尤其是在您到达此代码片段之前键入了什么(以及在您到达之前正在进行的其他输入活动) ?