C++字符串流错误处理
C++ stringstream 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);
一旦流进入失败状态,它将保持失败状态,直到clear()
编辑。也就是说,您需要执行以下操作:
if (ss.fail()) {
std::cout << "This is not an integern";
ss.clear();
// ...
}
也不是说只写入字符串流不会替换字符串流的内容! 要替换字符串流的内容,您可以使用 str()
方法:
ss.str(strNumber);
或者,您可以在每次迭代中创建新的字符串流,但如果正在创建许多流,则成本相对较高。
相关文章:
- 使用返回对象的函数处理错误
- C++:处理错误,看不懂我的错误
- 如何处理错误"E1696命令行错误:无法在Visual Studio 2017中打开元数据文件"mscorlib.dll"?
- C++ 异常处理错误输出
- 信号处理错误
- 文件处理I/O C 错误
- 文件处理 - 错误:与 while 循环 (C++) 中的"运算符>>"不匹配(代码::块)
- SDL的事件处理错误
- HMODULE在重建导入地址表IAT时处理错误
- C++ 中的文件处理错误 - 调用"std::basic_fstream<char, std::char_traits<char> >::open(const char[8],
- 在处理线程时,处理错误的正确方法是什么
- 处理C++错误
- 异常处理C++错误
- CUDA图像处理错误
- 文件处理错误
- 代码::阻止资源预处理错误
- 使用模板创建类的新实例,不知道如何处理错误
- Qt 与 opencv 异常处理错误
- 提升 MSM 中的错误处理错误
- 如何处理错误“vtkTrivialProducer :此数据对象不包含请求的范围”