gpt4 book ai didi

c - 从二进制文件写入和读取整数数组

转载 作者:行者123 更新时间:2023-11-30 16:47:23 26 4
gpt4 key购买 nike

您好,我正在尝试从文件中写入和读取整数数组,但是,我用来读回它们的循环处于无限循环中。我将如何修复这个无限循环,以便当它到达文件末尾时退出循环。另外,我并不完全确定 fread 是否按照我的预期进行。

 FILE *fptr = fopen("number.db", "wb");
int nums[100] = {1,2,3,4,5,6,7,8,9,100,101,102,103,104,105};
int nums2[100];

fwrite(nums,sizeof(int),15,fptr);
fclose(fptr);

fptr = fopen("number.db", "rb");
fseek(fptr,0,SEEK_END);
long end = ftell(fptr); //finds length of the file
fseek(fptr,0,SEEK_SET);

while(!feof(fptr)){
int counter = 0;
fread(nums2,sizeof(int),1,fptr);
fseek(fptr,counter,SEEK_SET);
counter++;
if(counter>=end){ //Breaks when it seeks to the end
break;
}
fclose(fptr);

我觉得恐惧的逻辑有些道理,但我不太确定。当我打印出保存在“nums2”中的数字时,它只是读取的最后一个数字:nums2 的所有元素都是 105。

最佳答案

问题出在寻道/计数器初始化的组合上。

如果您每次都将计数器设置为 0(第一条记录)并查找它,则您将始终处于文件记录的“有效范围”内。文件结束条件永远不会发生,因此 while 查找将进入无限循环

我确实相信 if 条件“if(counter>=end)”也没有用,我会删除它。 while 循环将在 eof 一次完成,这是应该的方式。

 FILE *fptr = fopen("number.db", "wb");
int nums[100] = {1,2,3,4,5,6,7,8,9,100,101,102,103,104,105};
int nums2[100];

fwrite(nums,sizeof(int),15,fptr);
fclose(fptr);

fptr = fopen("number.db", "rb");
fseek(fptr,0,SEEK_END);
long end = ftell(fptr); //finds length of the file
fseek(fptr,0,SEEK_SET);
int counter = 0;
while(!feof(fptr)){
fread(nums2,sizeof(int),1,fptr);
fseek(fptr,counter,SEEK_SET);
counter++;
if(counter>=end){ //Breaks when it seeks to the end
break;
}
}
fclose(fptr);

关于c - 从二进制文件写入和读取整数数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43360789/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com