2011-02-23 64 views
0

我有一個非常基本的問題,我想在用戶的一定範圍內的整數輸入。如果用戶給出一些字符串或字符而不是整數。然後我的程序進入無限循環。輸入問題在c + +

我的代碼是什麼樣的一些類似的

cin >> intInput; 
while(intInput > 4 || intInput < 1){ 
    cout << "WrongInput "<< endl; 
    cin >> intInput; 
} 

我只允許使用C++庫不是C庫。

+0

可能重複(http://stackoverflow.com/questions/266665/infinite-loop-in-c) – 2011-02-23 20:52:23

+2

作出這樣的26個問題。這裏的問題究竟是什麼? – Dave 2011-02-23 20:57:18

回答

0

這個答案的解決方案是經常閱讀來自標準輸入的。 [在C++中無限循環]的

std::string input; int value = 0; 
do 
{ 
     // read the user's input. they typed a line, read a line. 
    if (!std::getline(std::cin,input)) 
    { 
     // could not read input, handle error! 
    } 

     // attemp conversion of input to integer. 
    std::istringstream parser(input); 
    if (!(parser >> value)) 
    { 
     // input wasn't an integer, it's OK, we'll keep looping! 
    } 
} 
    // start over 
while ((value > 4) || (value < 1)); 
1

如在possible duplicate中提到的,您應該在每個循環中檢查cin的狀態。

可能的實現:

if(cin >> intInput) 
while(intInput > 4 || intInput < 1){ 
    cout << "WrongInput "<< endl; 
    if(!(cin >> intInput)){ break; } 
} 

非常醜陋的代碼,只是想闡明這是檢查cin狀態答案。

+1

不幸的是,這並沒有真正檢查初始讀取是否成功:-(。 – 2011-02-23 20:59:37

+0

好點,我會更新。 – 2011-02-23 21:00:24

+0

你也許應該清除標誌,而不是在fail &&!eof時跳出循環發生在輸入字符串而不是數字時) – AProgrammer 2011-02-23 21:13:46

-1
#include <locale> 
.. 
if(!isalpha(intInput)) { 
.. 
} 

注意,例如如果用戶輸入「+」,但也許這將讓你在正確的方向,這將不會工作。

+0

intInput顯然是一個整數,所以你不能在它上面使用'isalpha' – davka 2011-02-23 21:05:42