MrD*_*air 8 c++ error-handling
我正在尝试使用ss.fail错误地处理从字符串到int的转换,并且在程序循环回输入后,即使我输入整数,它也会一直出错.请注意,这只发生在错误句柄循环之后.我已经尝试过ss.clear(),cin.ignore等,当我输入一个整数时它仍然无限循环.我如何正确地错误处理这个?
string strNumber; //User to input a number
stringstream ss; //Used to convert string to int
int number; //Used to convert a string to number and display it
bool error = false; //Loops if there is an input error
do{
//Prompts the user to enter a number to be stored in string
cout << endl << "Enter an integer number: ";
getline(cin, strNumber);
//Converts the string number to int and loops otherwise
ss << strNumber;
ss >> number;
if(ss.fail()){
cout << "This is not an integer" << endl;
ss.clear();
//cin.ignore(numeric_limits<streamsize>::max(), '\n');
error = true;
}
else
error = false;
} while(error == true);
Run Code Online (Sandbox Code Playgroud)
一旦流进入失败状态,它将保持失败状态直到被clear()编辑.也就是说,你需要做这样的事情:
if (ss.fail()) {
std::cout << "This is not an integer\n";
ss.clear();
// ...
}
Run Code Online (Sandbox Code Playgroud)
也不只是写入字符串流并不会替换字符串流的内容!要替换字符串流的内容,您可以使用以下str()方法:
ss.str(strNumber);
Run Code Online (Sandbox Code Playgroud)
或者,您可以在每次迭代中创建一个新的字符串流,但如果创建了许多流,则这相对昂贵.
| 归档时间: |
|
| 查看次数: |
7365 次 |
| 最近记录: |