由于 eof 指示是在读取文件到结尾的时候,才会改变有效的状态。但是,再下一次没有读到数据的时候,eof 才会改变;
但是如果此时还是用 eof 标志位来判断文件是否读到了 end(下图while循环),就会导致此时的 infile>>data 语句还会流入数据(文件的最后一行数据),导致复制的文件中,会多出一行。
while(!infile.eof())
{
infile >> data;
cout << data << endl;
outfile << data << endl;
}
按照 笔记1 中的输入,最后文件 copy 的结果应该是:
copy from test.txt to test_1.txt
John
20
20
为消除多与的读取、复制,我们只需要在还能读取文件数据的时候,才将数据复制到新文件中即可,即代码可以改成:
while(infile >> data)
{
cout << data << endl;
outfile << data << endl;
}