私のコードは、テキストファイルInput_File_Name
から符号なしint変数を読み込みます。ifstreamを使用して、unsigned int変数をファイルから正しく読み取る方法は?
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'を提供しているかどうかを確認してください。 – jrok