可能性の重複:
Reading from text file until EOF repeats last line
c++ EOF running one too many times?なぜC++はifstream重複レコード
私が読んで、バイナリファイルを書き込むが、私する単純なC++のコードを書いていますifstreamがレコードを2回読み取ることがわかりました。ここで
、ofstream outfile;
int data[5];
outfile.open("abc.out", ios::out | ios::trunc | ios::binary);
data[0] = data[1] = 1;
data[2] = data[3] = 2;
data[4] = -1;
cout << "ORIGINAL DATA:" << data[0] << " " << data[1] << " " << data[2] << " " << data[3] << " " << data[4] << endl << endl;
outfile.write((char *)&data[0], 5*sizeof(int));
outfile.close();
ifstream infile;
infile.open("abc.out", ios::in | ios::binary);
data[0] = data[1] = data[2] = data[3] = data[4] = 0;
while (!infile.eof())
{
infile.read((char *)&data[0], 5*sizeof(int));
cout << data[0] << " " << data[1] << " " << data[2] << " " << data[3] << " " << data[4] << endl;
}
を同じケースを私はこれが起こるかわからないが、私はWindowsとLinuxでMINGW32とのコードをコンパイルしようとする出力
元のデータである:1 1 2 2 -1
1 1 2 2 -1
1 1 2 2 -1
'infile.eof()'は、*読み込みに失敗した後にのみtrueを返します。そのため、ループはあまりにも多く実行されます。 –
Bo Perssonに感謝しますが、私はまだそれを修正する方法を理解していません。 「テキストファイルからEOFが最後の行を繰り返すまで読む」を読むと、次のコードが試されます。 while(true){ ... if(infile.eof())break; } でもまだ動作しません – user1285419
@user - coutに書き込むことを決定する前に、eofをテストしたり、 'read'(ヒント、ヒント!)の戻り値をチェックすることができます。 –