[英]writing and reading an array of integers from a binary file
嗨,我正在尝试从文件写入和读取整数数组,但是,我用来读回它们的循环处于无限循环中。 我将如何修复此无限循环,以便在到达文件末尾时退出循环。 另外,我也不完全确定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)”也是无用的,因此我将其删除。 一旦eof完成while循环,就应该这样。
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.