-2

one.txt という名前の .txt ファイルがあります。次の 3 つのシーケンスが含まれています。

1 -1 -1 1 1 1
1 1 1 -1 -1 -1
1 -1 1 -1 1 1

次のように、ネストされた for ループを使用して、上記のファイルで使用可能なシーケンスを 3 回繰り返して読み取ります。

int dd6[6];

ifstream f6;


for(int i=0;i<3;i++){

    f6.open("C:\\one.TXT");

        for(int i7=0;i7<3;i7++){

              for(int i8=0;i8<6;i8++){
                  f6>>dd6[i8];
                  cout<<dd6[i8]<<" ";
              } 
              cout<<"\n";   
        }
        f6.close();
        cout<<"\n";

}

上記のプログラムに示されているように、次のように one.txt で使用可能な 3 つのシーケンスを 3 回読み取る必要があります。

1 -1 -1 1 1 1
1 1 1 -1 -1 -1
1 -1 1 -1 1 1

...................................

1 -1 -1 1 1 1
1 1 1 -1 -1 -1
1 -1 1 -1 1 1

...................................

1 -1 -1 1 1 1
1 1 1 -1 -1 -1
1 -1 1 -1 1 1

しかし、上記のプログラムを使用すると、常に次のような出力が得られます。2 番目と 3 番目のトリプレットでは、最後のシーケンス (1 1 -1 -1 1 1) が 3 回だけ表示されます。

1 1 1 -1 -1 -1
1 -1 1 -1 1 1
1 1 -1 -1 1 1

...................................

1 1 -1 -1 1 1
1 1 -1 -1 1 1
1 1 -1 -1 1 1

………………

1 1 -1 -1 1 1
1 1 -1 -1 1 1
1 1 -1 -1 1 1

私のコードで利用可能な問題は何でしたか? どんな助けでも大歓迎です。

ありがとう

4

1 に答える 1

1

これが問題かどうかはわかりませんが、ファイルを閉じて開く代わりに、get ポインターをファイルの先頭に送信するだけで済みます。

f6.seekg(0, ios::beg);

編集:答えた

これが正しいコードです。ストリームがファイルの終わりに到達すると、エラー フラグが設定され、それ以降は読み取り値が正しくありません。再度読み取る前に、ストリームをクリアする必要があります。ストリームを毎回開かないバージョンのプログラムを作成しましたが、ファイルを開いたり閉じたりしても機能します。

int dd6[6];

ifstream f6;
f6.open("C:\\one.TXT");

for(int i=0;i<3;i++){

    //f6.open("C:\\one.TXT");

        for(int i7=0;i7<3;i7++){
              for(int i8=0;i8<6;i8++){

                  f6>>dd6[i8];
                  cout<<dd6[i8]<<" ";
              } 
              cout<<"\n";   
        }
        f6.clear(); //clear the error flags!
        f6.seekg(0, ios::beg);
        cout<<"\n";

}
于 2012-10-25T13:28:26.103 に答える