免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4301 | 回复: 10
打印 上一主题 下一主题

fread问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-03-11 15:26 |只看该作者 |倒序浏览
这几天写了一个小程序,就是用fwrite把一个结构写到一个文件里面,然后用fread去读 并打印出来,
具体是这样的,这只是读取的那部分程序片段。
写入文件的只有一句话fwrite(tst,sizeof(teset),1,fp)
struct test

int a;
int b;
int c;
}tst;
while (!feof(fp))

fread(tst,sizeof(test),1,fp);

printf("%d%d%d\n",tst.a,tst.b,tst.c);

结果打印了两遍,郁闷中,恳求帮助。不胜感激。

论坛徽章:
0
2 [报告]
发表于 2006-03-11 18:58 |只看该作者
这个问题好像比较有名的,可惜不太清楚

论坛徽章:
0
3 [报告]
发表于 2006-03-11 19:06 |只看该作者
你把文件关闭后再打印试试呢。

论坛徽章:
0
4 [报告]
发表于 2006-03-11 19:08 |只看该作者
while (fread(tst,sizeof(test),1,fp) ==   1)

printf("%d%d%d\n",tst.a,tst.b,tst.c);

论坛徽章:
0
5 [报告]
发表于 2006-03-11 19:48 |只看该作者
试过了,ammy是正确的,谢谢。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2006-03-11 22:47 |只看该作者
feof 是个垃圾。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
7 [报告]
发表于 2006-03-12 10:09 |只看该作者
楼主用四楼的方法试一下,五楼不是试过了吗?你为什么不试?
学习要主动。人家都在你的回复里学到东西了,你自己还等什么了?

论坛徽章:
0
8 [报告]
发表于 2006-03-13 09:47 |只看该作者
问题已经解决,多谢ammy兄!

论坛徽章:
0
9 [报告]
发表于 2006-03-13 13:02 |只看该作者
在C的标准库中,input 函数(如fread, fgetc, getchar 等)在遇到 eof 和
error conditions 时,其返回值都是 EOF,这时需用 feof or ferror 进行判别。
也就是说,feof , ferror 是用于判别产生 EOF 原因的。在没有遇到 EOF时,
用这两个函数是不合适的。

  下面是一些C语言的书,有空看一下,会对大家有帮助的。
《the c reference manual》(人邮影印版)
                对C语言作了完整,详尽,权威的描述,
                     另外还给出了一些实用的技巧和指导
《the c programming language》
                对C语言的常用部分和常用技巧作了最权威的指导
《expert c programming》
                对C语言的疑难部分作了很好的讲解。
《the standard c library》
                对C语言标准库的实现作了详细介绍。

  搜索引擎是 http://mytianwang.cn/

论坛徽章:
0
10 [报告]
发表于 2011-11-23 19:26 |只看该作者
贴一个自己写的完整的小例子,redhat linux gcc下编译通过:

#include <stdio.h>
#include <stdlib.h>

struct test {
        int a;
        int b;
        int c;
}tst = {1,2,3};

int main(void)
{
        FILE *fp = NULL;

        fp = fopen( "./data.c", "w+" );
        if (!fp) {
                exit (-1);
        }
        fwrite(&tst, sizeof(tst), 1, fp);

        rewind(fp);  //文件指针指回到文件开头位置
        while ( fread(&tst,sizeof(tst),1,fp) ) {
                printf("%d %d %d\n", tst.a, tst.b, tst.c);
        }
       
        fclose(fp);
        return 0;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP