| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 499 人关注过本帖
标题:为什么输入的时候会多输出一行
只看楼主 加入收藏
liuleix157
Rank: 1
等 级:新手上路
帖 子:34
专家分:4
注 册:2013-7-16
结帖率:80%
收藏
已结贴  问题点数:20 回复次数:6 
为什么输入的时候会多输出一行
程序代码:
 #include"include.c"
#include"struct.c"
#include"file.c"
int main(){
        FILE *f;
        User *u;
        char f_name[20];
        printf("scanf open file name:");
        gets(f_name);
        f = fopen(f_name,"ab+");
        while(!feof(f)){
                u = (User *)malloc(sizeof(User));
                fread(u,sizeof(User),1,f);
                printf("%s\t%d\t%s\n",u->name,u->age,u->f_word);
        }
        fclose(f);
}     



用fwrite保存一行数据后  输出会多输出一行

输入    name    20    lelelele
输出     name    20    lelelele
            0
2013-08-26 10:47
liuleix157
Rank: 1
等 级:新手上路
帖 子:34
专家分:4
注 册:2013-7-16
收藏
得分:0 
如将“name    20    lelelele”保持到文件中能读出来   但是会多读出一行
输出     name    20    lelelele
                  0
2013-08-26 10:59
jg658237
Rank: 7Rank: 7Rank: 7
来 自:青藏高原
等 级:黑侠
帖 子:224
专家分:529
注 册:2013-8-8
收藏
得分:5 
printf("%s\t%d\t%s\n",u->name,u->age,u->f_word);改成 printf("%s\t%d\t%s\n",u->f_name,u->age,u->f_word);

 fclose(f)用的不对吧。

武功再高也怕菜刀.
2013-08-26 11:46
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9032
专家分:54061
注 册:2011-1-18
收藏
得分:5 
一般看到 while(!feof(f)) 等代码
虽不是100%,但也有99.99%的可能是根本没理解什么是eof?
2013-08-26 12:53
liufashuai
Rank: 9Rank: 9Rank: 9
来 自:冥界-魔域-魂殿
等 级:蜘蛛侠
威 望:1
帖 子:370
专家分:1374
注 册:2012-6-22
收藏
得分:5 
理论上没有什么问题,
敢不敢把你的代码全部搞出来,除非你能保证你的错误只出现在这一部分!

楼上说的对,feof理解不正确很容易出错

还有最好不要把fread,fwrite 这一类函数用来读文本文件,它们一般用来读取二进制(而且feof对二进制的判断不准确)
读取文本v文件用fscanf,fprintf格式化函数,你的问题很有可能出现在这里

有一种落差是,你配不上自己的野心,也辜负了所受的苦难。






2013-08-26 13:37
liuleix157
Rank: 1
等 级:新手上路
帖 子:34
专家分:4
注 册:2013-7-16
收藏
得分:0 
回复 4楼 rjsp
求理解   书上就说判断是否到文件尾
2013-08-26 15:07
dyh36_c
Rank: 1
等 级:新手上路
帖 子:2
专家分:5
注 册:2013-7-24
收藏
得分:5 
feof判断是否到文件尾,复制文件内容一般都会多一行.原因是:(以下是我摘录的笔记,我只是理解了,却还不能组织语言讲出来,见笑了)
feof()原理:
#define _IOEOF 0x0010
#define feof(_stream) ((_stream)->_flag & _IOEOF)

 由此可知,只有当fp->_flag & 0x0010为真时,才认为文件结束了。在VC里,只有当file position indicator(在Windows上是fp->_ptr)到了文件末尾,然后再发生读/写操作时,fp->_flag才会被置为含有_IOEOF,然后再调用feof(),才会得到文件结束的信息。并不是file position indicator一指到文件尾,feof()就认为文件结束。
2013-08-26 21:33
快速回复:为什么输入的时候会多输出一行
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032238 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved