size_t fread(void *ptr, size_t size, size_t nobj, FILE *stream)
问题是最后一字读取的个数可能不是我指定的个数,但是文件已经到结尾了。
fread(Ptr,sizeof(int),400,fp);
请问通常最后一次读取该如何处理?
用fread每次读取一个值,处理完了在读取下一个值,效率会比较低。我的想法是一次读取多个值
答案:2 悬赏:0 手机版
解决时间 2021-03-07 21:18
- 提问者网友:王者佥
- 2021-03-07 12:59
最佳答案
- 五星知识达人网友:掌灯师
- 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)
{
...
}
前几次读取 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");
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯