[解決済み] ifstream.good()とbool(ifstream)の違いについて
質問
テキストファイルからいくつかの変数を取得するプログラムを書いています。
プログラムがEOFを見つけると
は、データの入力を終了します。
int main()
{
int val, count = 0;
ifstream fileIn;
fileIn.open("num.txt");
fileIn >> val;
while (fileIn)
{
++count;
cout << "number: " << val << endl;
fileIn >> val;
}
cout << "count: " << count << endl;
fileIn.close();
return 0;
}
num.txt
ファイルを作成します。
11 22 33 44
プログラムの出力です。
number: 11
number: 22
number: 33
number: 44
count: 4
すべてOKです。しかし、while conditionセクションを
fileIn
から
fileIn.good()
,
を実行すると、プログラムの出力は次のようになります。
number: 11
number: 22
number: 33
count: 3
最後の値をスキップするようになりました。
なぜこのようなことが起こるのでしょうか?
fileIn
と
fileIn.good()
?
解決方法は?
<ブロッククオート
最後の値をスキップするようになりました。なぜこのようなことが起こるのでしょうか?
との違いは
fileIn
と
fileIn.good()
?
fileIn >> val;
while (fileIn)
{
++count;
cout << "number: " << val << endl;
fileIn >> val;
}
を指定した場合、その内容は
"11 22 33 44"
に関連付けられたストリームで
fileIn
. を使用すると
bool(fileIn)
変換演算子
は、ストリームが失敗していないかどうかを返します。ただし
eof()
はストリームの失敗ではありません。失敗とは、基本的にI/O操作に失敗することです。
というわけで、最後の数字を読み込んだ後
44
を
val
. ストリームが失敗していないため、再びループに入る。
count
がインクリメントされます。
val
が印刷されますが、次の
fileIn >> val
は失敗します。そして、whileループの条件でテストされ、失敗するとループが終了します。
実行
fileIn.good()
リターン
false
ストリームの
state flags
が設定されている。具体的には
eof
,
fail
そして
bad
関連
-
[解決済み】coutはstdのメンバではない
-
[解決済み】ファイルから整数を読み込んで配列に格納する C++ 【クローズド
-
[解決済み】1つ以上の多重定義されたシンボルが見つかる
-
[解決済み] Git リポジトリで削除されたファイルを検索して復元する方法
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] static_cast, dynamic_cast, const_cast, reinterpret_cast はいつ使うべきですか?
-
[解決済み] Microsoft Officeをインストールせずに、C#でExcel(.XLSおよび.XLSX)ファイルを作成するにはどうすればよいですか?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] 私的相続、公的相続、保護相続の違いについて
-
[解決済み] g++とgccの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] テスト
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み】C++でint型に無限大を設定する
-
[解決済み】致命的なエラー LNK1169: ゲームプログラミングで1つ以上の多重定義されたシンボルが発見された
-
[解決済み】関数名の前に期待されるイニシャライザー
-
[解決済み】fpermissiveフラグは何をするのですか?
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】 while(cin) と while(cin >> num) の違いは何ですか?)
-
[解決済み】変数やフィールドがvoid宣言されている
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++