2013-07-26 84 views
-5
bool correct = false; 
while (!correct) 
{ 
    cout << "Please enter an angle value => "; 
    cin >> value; //request user to input a value 

    if(cin.fail()) 
    { 
     cin.clear(); 
     while(cin.get() != '\n'); 
      correct = false; 
    } 
    else 
     cin.get(); 
    cin.ignore(); 
    correct = true; 
} 

下面就根據上面的代碼我的問題:程序不執行循環

  1. 後,我輸入一個值,該程序將暫停,我必須再次按Enter鍵繼續下一部分的程序;我怎樣才能避免它?

  2. 此外,如果我輸入像'abcd'這樣的值,程序將不會循環以請求用戶再次輸入值,爲什麼會這樣呢? 相反,它仍然將繼續,並且輸出0

值我還是新來這幾樣的命令,只是在玩和探索它們,我很欣賞你的指導!

編輯:

while (!correct) 
    { 
     cout << "Please enter an angle value => "; 
     cin >> value; //request user to input a value 

     if(cin.fail()) 
     { 
     cin.clear(); 
     while(cin.get() != '\n'); 
     correct = false; 

     } 
     else 
     { 
     cin.get(); 
     cin.ignore(); 
     correct = true; 
     } 
    } 
+0

使用調試器... –

+0

使用括號,而不管該範圍內有多少行。這會使閱讀更容易。 –

+0

由於代碼無條件地將'correct'設置爲'true'(一旦縮進以反映實際結構),您的循環就會停止。你是否忘記了'else'子句中的'{...}'?我擔心一旦你得到EOF會發生什麼(例如,用戶從'/ dev/null'重定向標準輸入)。我想你最終會陷入無限循環。 –

回答

3

您設置correct=true無條件地在第一個迭代,並擺脫困境的循環。看起來你打算在else之後的三個陳述中添加一對大括號。

+0

謝謝!對不起,我不明白我的正確答案是無條件的嗎? – user2611244

+0

看看原來的代碼。 while循環結束之前的最後一條語句是'correct = true;',並且它總是被執行。順便說一下,我注意到你有'while(cin.get()!='\ n');'在循環後有一個空語句,這意味着'correct = false;'的縮進是不正確的,你可以如果輸入來自'/ dev/null',則會遇到問題。我之前說過,但現在比我原先想象的更加緊密。 –