您好我在尝试从文件中写入和读取整数数组,但是,我用来读取它们的循环是一个无限循环。我如何修复这个无限循环,以便当它到达文件末尾时它退出循环。此外,我不完全确定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 :(得分:0)
问题在于搜索/计数器初始化的组合。
如果您每次将计数器设置为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);