我是c ++的新手,所以这可能会非常明显。
在我的程序中,我正在创建一个数组,将其写入二进制文件,然后将其读入另一个数组并打印它。
我似乎无法从二进制文件读取到新数组。当我尝试打印出新阵列时,很明显它是空的。你能帮我看看我做错了吗?
int main(){
int N;
std::cin >> N;
int* array = new int[N*N];
for(int row = 0; row < N; row++){
for(int column = 0; column < N; column++){
array[row*N + column] = (row + column)%10;
cout << array[row*N + column];
}
cout << "\n";
}
//----------------------------------------------------
ofstream out("array.txt", ios::out | ios::binary);
out.write((char*)array,N*N*sizeof(int));
//------------------------------------------------------
int* altArray = new int[N*N];
ifstream in;
in.open("array.txt", ios::in | ios::binary);
in.read((char*)altArray, N*N*sizeof(int));
//-----------------------------------------------------
cout << "From Binary File\n";
for(int row = 0; row < N; row++){
for(int column = 0; column < N; column++){
cout << altArray[row*N + column];
}
cout << "\n";
}
//----------------------------------------------------
delete []array;
delete []altArray;
return 0;
}
答案 0 :(得分:1)
根据N
的大小,数组内容可能仍在输出缓冲区中而不会刷新。您必须将缓冲区刷新到磁盘或关闭文件,例如
out.close();
然后,当你再次回读时,你会看到数组的内容。
答案 1 :(得分:1)
out.write((char*)array, N*N*sizeof(int));
// ...
in.read((char*)altArray, N*N*sizeof(int));
文件流通过缓冲来维护其数据。在将数据读入程序之前,输出序列显然没有从缓冲区中刷新。您需要先刷新输出流:
out << std::flush;
如果不再需要文件流,也可以通过关闭文件来完成。
另一种选择是你可以将tie()
个流放在一起,这样无论何时执行读取都会同步输入序列:
in.tie(&out);