这个程序为什么输出的是25个呢?

#include
#include
#include

using namespace std;
struct node
{
int x,y;
};
int main(){
FILE* f1 = fopen("in.dat","w");
node a;

for(int i = 0;i < 10000;i++){
    a.x = rand();
    a.y = rand();
    fwrite(&a,sizeof(a),1,f1);
}

fclose(f1);

f1 = fopen("in.dat","r");

int i = 1;
while(!feof(f1)){
    fread(&a,sizeof(a),1,f1);
    printf("%d\t",i++); 
}
cout << endl;

}

feof()详细讲解

看完这篇博文,再单步跟踪看看,你就会明白了。
feof()宏是判断当前读取内容是否是-1来判断文件结束,这在二进制文件中并不可靠。而文件不指明打开方式的话,默认打开格式就是二进制格式。所以问题应该在这里。

调试下看看有没有异常发生,提前结束了循环

真看不出来,在上边for里加个断点看运行了多少次,再在下边while里加个断点看看吧,

是rand取随机数的问题,你把a.x和a.y赋值为1和2之类的数就好了。
其实你看看即使你不改in.dat文件是80000字节大小,说明输出了10000次。但是只读了25次,应该是输入到文件里的内容有什么问题,让程序出错了。

自己Debug下调试一下,F10单步执行看看

你还会是单步调试下吧

每次执行都是输出25个?