2013-07-27 64 views
0

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

“行动”在哪里定义? – user2357112

+0

错字,它是行动= 0; – user2626532

+0

你有没有试过,getline(cin,action); – btse

回答

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

这不再是最少的代码:

例如,我与测试。但它确实帮助我确保我的代码正在做我期望的。

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

+0

我做到了。非常适合摆脱循环。它仍然没有要求输入。我需要代码来显示文本一次,然后要求输入。据推测,如果您键入除1之外的任何内容,则会重复该顺序。但是就目前而言,它只是将你踢出循环而没有机会纠正行动。 – user2626532

+0

你是什么意思'没有要求输入'?当我运行它时,我看到'不看'提示,然后我输入数据。这不是你看到的事情吗?如果你的输入流已经处于错误状态,那么你将会被圈出。您可能需要编写一些恢复操作来代替'// ... problems'注释(并在if语句的主体周围添加大括号)。这可能包括重置错误状态,读到行尾以及可能的其他操作。 –

+0

我做了cerr动作。它应该返回0。问题仍然是它不要求我改变它。 – user2626532