2012-11-25 108 views
2

我試圖只接受整數作爲輸入,並通過它作爲一種驗證同時循環。問題是,當用戶沿着「Two」行輸入某些內容時,while循環會在再次詢問用戶之前經過輸入3次。有沒有辦法來防止這種情況發生,只是跳過3次迭代?雖然循環重複4次

cout << "Enter Student ID: "; 
while(!(cin >> id)) 
{ 
    cout << "\nERROR: Please enter a Positive Whole Number" << endl; 
    cin.clear(); 
    cin.ignore(); 
    cout << "Enter Student ID: "; 
} 
+0

沿着兩條線的意思是什麼? –

+0

如果用戶鍵入「Two」,它將循環3次,每次字符串都會循環一次。 –

回答

3

您可以使用它。

cin.ignore (std::numeric_limits<streamsize>::max(), '\n') ; 

它會跳過所有行,並且無論您輸入多少無效字符,都不會獲得額外的循環迭代。

+0

這就是我一直在尋找的,謝謝! –

0

原因while循環迭代是該流不被提取完全這樣只要使用這行

cin.ignore (std::numeric_limits<streamsize>::max(), '\n') ; 

循環將迭代僅有一次,因爲無論你多麼大的輸入給它將被提取。 Cin.ignore()僅從流中刪除一個字符。

對於你的情況,如果你輸入「two」,那麼在第一次迭代之後,只有't'將被提取,並且輸入將是第二次迭代的「wo」。但是通過添加這一行流將在第二次迭代中爲空,並且將從用戶接收輸入。