我的代碼從文本文件Input_File_Name
中讀取無符號整型變量。如何使用ifstream正確讀取文件中的無符號整型變量?
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
異常?
這只是'運營商>>'如何工作;它會提取'33'然後停止,'abcd'停留在流中,以便下次調用'operator >>'。你可以改爲將'33abcd4'讀入一個字符串,然後檢查它中的非數字字符。另外,如果你有最近支持C++ 11的編譯器,檢查標準庫是否提供'std :: stoull'。 – jrok