我想创建一个二进制文件,其中包含从0到10的整数。在那之后,我想把它们的每一个加倍并打印出来。当我运行它时,没有任何东西被打印出来。
using namespace std;
int main()
{
fstream binfile("Numbers.dat", ios::in | ios::out | ios::binary);
for(int i=0; i<=10; i++)
binfile.write((char*)&i, sizeof(i));
binfile.flush();
int number;
while(binfile.read((char*)&number, sizeof(number)))
{
number*=2;
binfile.seekp(binfile.tellg()-sizeof(number));
binfile.write((char*)&number, sizeof(number));
binfile.flush();
}
binfile.seekg(0);
while(binfile.read((char*)&number, sizeof(number)))
cout<<number;
return 0;
}
答案 0 :(得分:0)
您的while
条件永远不会得到满足。您的第一次(也是唯一一次)读取尝试返回0
- 这就是为什么没有打印的原因。
答案 1 :(得分:0)
在第一个循环之后,你必须寻找&#34;得到&#34;指向第0个位置的指针,用于覆盖后续&#34;中的数字;而#34;循环
第二个循环终止,因为binfile的eofbit被设置,所有以下输入 - 输出操作都将失效,所以我们必须清除eofbit以重新启动操作
工作代码:
#include <fstream>
#include <iostream>
using namespace std;
int main()
{
fstream binfile("Numbers.dat", ios::in | ios::out | ios::binary);
for(int i=0; i<=10; i++) // 1st loop
binfile.write((char*)&i, sizeof(i));
binfile.flush();
binfile.seekg(0);
int number;
while(binfile.read((char*)&number, sizeof(number))) // 2nd loop
{
number*=2;
binfile.seekp(binfile.tellg()-sizeof(number));
binfile.write((char*)&number, sizeof(number));
binfile.flush();
}
binfile.clear();
binfile.seekg(0);
while(binfile.read((char*)&number, sizeof(number))) // 3rd loop
cout<<number << " ";
return 0;
}