2017-09-22 157 views
-4

你好,這是我的第二個問題爲同一個c + +程序(對不起,如果這是一個簡單的問題)即使條件仍然滿足,該循環終止。

我想用循環來檢查輸入是否有效。然而,如果輸入有效或沒有,這個循環似乎並不重要。

int b(-1); 
check = false; 
while (b < 1 || b > 12) 
{ 
    if (check) 
     std::cout<<"Sorry try again!\nMonth: "; 
    std::cin>>b; 
    check = true; 
{ 

如果用戶輸入1到12之間的值。否則繼續循環。

但是,當我運行該程序並輸入一個無效的輸入它繼續。

Year: 2017 
Month *In number format*: 20 
Day: 

即使-1不起作用,這很奇怪,因爲我在循環開始之前將值設置爲-1。

Year: 2017 
Month *In number format*: -1 
Day: 

這是使用或小於和大於?

+0

請提供完整的代碼片段 –

+1

對不起,我錯誤地把錯誤的大括號。 – amgtree

+0

通過再次更新您的問題來糾正它。 –

回答

1

如果輸入無效輸入,流的失敗位將被設置。在這種情況下,目標變量(b)不會被修改,只要您不清除該位,則無論您提供什麼輸入,隨後每次調用operator>>都會失敗。實際上,輸入不是從流中取出的,所以你會一遍又一遍地重新讀取它。

您應該檢查的std::in狀態,如果需要的話清楚的錯誤位,並丟棄無效輸入:

if(std::in.fail()) 
{ 
    std::in.clear(); 
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); 
} 
+0

也謝謝你 – amgtree

相關問題