我有一個非常基本的問題,我想在用戶的一定範圍內的整數輸入。如果用戶給出一些字符串或字符而不是整數。然後我的程序進入無限循環。輸入問題在c + +
我的代碼是什麼樣的一些類似的
cin >> intInput;
while(intInput > 4 || intInput < 1){
cout << "WrongInput "<< endl;
cin >> intInput;
}
我只允許使用C++庫不是C庫。
我有一個非常基本的問題,我想在用戶的一定範圍內的整數輸入。如果用戶給出一些字符串或字符而不是整數。然後我的程序進入無限循環。輸入問題在c + +
我的代碼是什麼樣的一些類似的
cin >> intInput;
while(intInput > 4 || intInput < 1){
cout << "WrongInput "<< endl;
cin >> intInput;
}
我只允許使用C++庫不是C庫。
這個答案的解決方案是經常閱讀來自標準輸入的行。 [在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));
如在possible duplicate中提到的,您應該在每個循環中檢查cin
的狀態。
可能的實現:
if(cin >> intInput)
while(intInput > 4 || intInput < 1){
cout << "WrongInput "<< endl;
if(!(cin >> intInput)){ break; }
}
非常醜陋的代碼,只是想闡明這是檢查cin
狀態答案。
不幸的是,這並沒有真正檢查初始讀取是否成功:-(。 – 2011-02-23 20:59:37
好點,我會更新。 – 2011-02-23 21:00:24
你也許應該清除標誌,而不是在fail &&!eof時跳出循環發生在輸入字符串而不是數字時) – AProgrammer 2011-02-23 21:13:46
#include <locale>
..
if(!isalpha(intInput)) {
..
}
注意,例如如果用戶輸入「+」,但也許這將讓你在正確的方向,這將不會工作。
intInput顯然是一個整數,所以你不能在它上面使用'isalpha' – davka 2011-02-23 21:05:42
可能重複(http://stackoverflow.com/questions/266665/infinite-loop-in-c) – 2011-02-23 20:52:23
作出這樣的26個問題。這裏的問題究竟是什麼? – Dave 2011-02-23 20:57:18