永发信息网

用fread每次读取一个值,处理完了在读取下一个值,效率会比较低。我的想法是一次读取多个值

答案:2  悬赏:0  手机版
解决时间 2021-03-07 21:18
  • 提问者网友:王者佥
  • 2021-03-07 12:59
size_t fread(void *ptr, size_t size, size_t nobj, FILE *stream)

问题是最后一字读取的个数可能不是我指定的个数,但是文件已经到结尾了。
fread(Ptr,sizeof(int),400,fp);
请问通常最后一次读取该如何处理?
最佳答案
  • 五星知识达人网友:掌灯师
  • 2021-03-07 14:38
r = fread(ptr, 1, n, fp);
前几次读取 r == n
最后一次读取时 r <=n
r < n跳出循环即可。

例(假设数据长度是sizeof(int)的倍数,否则用1):
while(fread(Ptr,sizeof(int),400,fp) == 400)
{
...
}
全部回答
  • 1楼网友:掌灯师
  • 2021-03-07 14:51
fread如果没有错误,正常读到函数末尾,那么返回的result比传入的number要小,如果最后正好相等,那么下次返回0。可以用feof(file*)来判断一下是否到末尾了,见下面代码 if(ferror(fp)) puts("i/o error when reading"); else if(feof(fp)) puts("end of file reached successfully");
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯