0
int i = 0;
while(!fin.eof())
{

    fin >> fname;
    fin >> lname;
    fin >> id;

    customer[i].setFname(fname);
    customer[i].setLname(lname);
    customer[i].setId(id);

    i++;
}
fin.close();

プログラムがこの while ループの 4 回目の繰り返しに到達すると (そして、入力 .txt ファイルからテキストがなくなると)、ビジュアル スタジオから次のメッセージが表示されます。

program5.exe の 0x754bc41f で未処理の例外: Microsoft C++ 例外: std::ios_base::failure at memory location 0x003ceb64..

理由はわかりません。!fin.eof() を (fin >> x) に置き換えてみました。ここで、x は int です。while の代わりに do-while を試しました。get、getline を使用してみました。>> 演算子で eof がトリガーされないのは問題かもしれないと思ったので、fin.peek(); を追加しました。ループの最後にあるため、ピーク時に eof がトリガーされます。私は何が間違っているのか分かりません。私の顧客クラスが適切に機能すると仮定すると、このループの外で完全に機能することをテストしました。

4

1 に答える 1

1

思い出すと、ストリームを操作するときのイディオムの 1 つは、次のようなループを作成することです。

while (cin >> x){
   //do something...

値を読み込んでいる間、ストリームの状態を確認する必要があります。次のようなことができます

while(fin >> fname && fin >> lname && fin >> id){
...

これはおそらくもっとエレガントにすることができます

于 2013-07-01T22:16:15.840 に答える