2013-07-27 98 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