【发布时间】:2012-01-21 12:22:31
【问题描述】:
我的代码从文本文件Input_File_Name 中读取无符号整数变量。
unsigned int Column_Count; //Cols
unsigned int Row_Count;//Rows
try {
ifstream input_stream;
input_stream.open(Input_File_Name,ios_base::in);
if (input_stream) {
//if file is opened
input_stream.exceptions(ios::badbit | ios::failbit);
input_stream>>Row_Count;
input_stream>>Column_Count;
} else {
throw std::ios::failure("Can't open input file");
//cout << "Error: Can't open input file" << endl;
}
} catch (const ios::failure& error) {
cout << "Oh No!!" << error.what() << endl;
} catch (const exception& error) {
cout << error.what() <<"Oh No!!" << endl;
} catch (...) {
cout << "Unknown exception" << endl;
}
效果很好。 但是当我用错误的数据填充文本文件时
33abcd4 567fg8
它是这样工作的:
input_stream>>Row_Count; //Row_Count = 33;
input_stream>>Column_Count; // throws an ios::failure exception
为什么input_stream>>Row_Count;这一行不抛出异常?
据我了解, input_stream 将任何非数字符号视为分隔符,并在下一步尝试读取“abcd”。是这样吗?
如何在读取“33abcd4”时将空格符号设置为分隔符以从这行代码input_stream>>Row_Count; 中抛出ios::failure 异常?
【问题讨论】:
-
operator>>就是这样工作的;它将提取“33”然后停止,“abcd”留在流中以供下次调用operator>>。您可以改为将33abcd4读入字符串,然后检查其中是否存在非数字字符。此外,如果您有支持 C++11 的最新编译器,请检查标准库是否提供std::stoull。