Мой код считывает переменные типа int без знака из текстового файла 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». Это так?
Как установить символ пробела в качестве разделителя для выдачи исключения ios :: failure
из этой строки кода input_stream >> Row_Count;
при чтении «33abcd4»?