c++ - 为什么c++ ifstream会读取有重复记录的文件

标签 c++ file-io fstream

<分区>

Possible Duplicate:
Reading from text file until EOF repeats last line
c++ EOF running one too many times?

我正在编写一个简单的 c++ 代码来读写二进制文件,但我发现 ifstream 会读取记录两次。我不知道这是怎么发生的,但我尝试在 Windows 和 Linux 中使用 mingw32 编译代码,同样的情况

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;
}

这是输出

原始数据:1 1 2 2 -1

1 1 2 2 -1

1 1 2 2 -1

最佳答案

永远不要使用 .eof().good() 作为循环条件。它几乎总是会产生错误代码(就像在本例中一样)。

读取数据的惯用模式是 C++ 是这样的:

while (infile.read((char *)&data[0], 5*sizeof(int)))
{  
  cout << data[0] << " " << data[1] << " "  << data[2] << " "  
       << data[3] << " "  << data[4] << endl;
}

关于c++ - 为什么c++ ifstream会读取有重复记录的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10060991/

相关文章:

c++ - 检测录音中的不同声音/来源

c++ - 从文件中读取和写入字节 (c++)

c++ - 如何从文件中读取特征矩阵?

c++ - 在 C++ 中删除 ofstream 中的一行

c++ - 复杂的 C++ 文本文件 IO

c++ - 使用 std::ifstream 读取文件以编译 OpenGL 着色器不起作用

c++ - 从 boost::variant 获取 int 生成段错误

c++ - 在opengl中创建路灯

c++ - 确定 vector y 的元素是否出现在 vector x 中的最快方法

c# - 文件检查与打印