我有一个说“ file.dat”的文件,它有大约1300行和2列数字数据。我想使用ifstream读取文件的内容。当我使用ifstream对象读取此文件时,它将截断前400行并显示最后900行。
我尝试将标志ios_base::binary
放在ifstream对象的构造函数中,但问题仍然存在。我已经检查了数据文件,它显示了所有1300行。我确实有另一个ifstream对象,该对象正在从另一个文件读取数据,但是我使用另一个ifstream对象分别声明了它。该代码有点长,但这基本上是它的工作:
#include <iostream>
#include <fstream>
using namespace std;
int main(){
ifstream fin;
fin.open("chi2_rse.dat", ios_base::in | ios::binary);
double b;
double chi2;
while(fin >> b >> chi2){
cout << b << " " << chi2 << endl;
}
}
我不明白为什么ifstream跳过了前400行而没有读取整个文件。
答案 0 :(得分:0)
对于二进制文件,请勿使用>>
,因为它会跳过空格并可能修改行尾。
我建议使用read()
。您可以定义一个包含所需数据的向量。
fin.read(reinterpret_cast<char*>(buffer.data(),sizeOfFile);
答案 1 :(得分:0)
某些控制台的内部缓冲区有限,因此当缓冲区被填充时,旧数据(输出,输入命令)将被删除,以腾出空间显示新输出。发生这种情况时,常见的症状是您无法向上滚动特定点(并且看不到较早的输入命令)
您可以通过将程序输出重定向到文件然后检查该文件来检查程序输出是否正常。