是否有人可以帮助我查看我做错的地方?或解释原因?我是初学者,我尽力打开二进制文件。但它只是用完了“文件打开”“0”。没什么出来的。
目标: Count3s程序打开一个包含32位整数(int)的二进制文件。您的程序将计算此数字文件中值3的出现次数。您的目标是了解打开和访问文件以及应用控制结构的知识。包含程序使用的数据的文件名是“threesData.bin”。
我的代码如下,如果您知道,请帮助我。提前谢谢!
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
int count=0 ;
ifstream myfile;
myfile.open( "threesData.bin", ios::in | ios :: binary | ios::ate);
if (myfile)
{
cout << "file is open " << endl;
cout << count << endl; }
else
cout << "cannot open it" << endl;
return 0;
}
答案 0 :(得分:1)
首先,您应该使用
读取以二进制模式打开的文件 myfile.read (buffer,length);
其中buffer
应定义为
int data;
并用作
myfile.read (&data,sizeof(int));
第二个重点是从文件读取多个数字 - 您需要通过检查流的条件控制的循环。例如:
while (myfile.good() && !myfile.eof())
{
// read data
// then check and count value
}
最后一件事,你应该在完成阅读后关闭文件,即成功操作:
myfile.open( "threesData.bin", ios::binary);
if (myfile)
{
while (myfile.good() && !myfile.eof())
{
// read data
// then check and count value
}
myfile.close();
// output results
}
还有一些额外的提示:
1)int
并非总是32位类型,因此请考虑使用int32_t
中的<cstdint>
;如果你的数据有超过1个字节,可能是字节顺序很重要,但在任务描述中没有提到
2)read
允许每次调用读取多个数据对象,但在这种情况下,您应该读取数组而不是一个变量
3)阅读并尝试references和this等其他可用资源的示例。