| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 533 人关注过本帖
标题:求助!问题:文件输出最后一个重复输出和第一个不输出
只看楼主 加入收藏
影随风
Rank: 2
等 级:论坛游民
帖 子:38
专家分:24
注 册:2013-3-14
结帖率:85.71%
收藏
已结贴  问题点数:20 回复次数:3 
求助!问题:文件输出最后一个重复输出和第一个不输出
这是一个结构数组写的简单地手机通讯录,它的问题是执行浏览操作的时候,会把最后一组数据重复输出。
但是把浏览操作中 while(!feof(fp))
    {
        fscanf(fp,"%s%s%s%s%s%s%s%s",g.name,g.age,g.tele,g.qq,g.weixin,g.bd,g.email,g.sex);
        printf("%s%4s%15s%11s%11s%9s%18s%4s\n",g.name,g.age,g.tele,g.qq,g.weixin,g.bd,g.email,g.sex);
    }
的 while(!feof(fp))换成while( fscanf(fp,"%s%s%s%s%s%s%s%s",g.name,g.age,g.tele,g.qq,g.weixin,g.bd,g.email,g.sex)!=E0F)时会丢掉第一组数据,求帮助!

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct friends_list
{
 char  name[20],weixin[20],email[30],sex[4],age[10],qq[20],bd[10],tele[14];   
};
int Count=0;
void new_friend(struct friends_list frients[]);
void liulan_friend(struct friends_list friends[]);

int main(void)
{
    int choice;

 struct friends_list friends[1000];
 do
 {
  printf("1:新建 2:浏览 0:退出\n ");
  printf("请选择0~2号功能键\n");
  scanf("%d",&choice);
        switch(choice)
        {
        case 1:
            new_friend(friends);   
            break;
        case 2:
            liulan_friend(friends);
            break;
        case 0: break;
        }
}while(choice!=0);
   printf("感谢您使用本通讯录,欢迎下次使用\n");
   
  return 0;
}
 /*新建通讯录*/
void new_friend(struct friends_list friends[])
{
    struct friends_list f;
    FILE  *fp;
   
    if(Count==1000)
    {
     printf("通讯录已满\n");                        
                                                                                                
    return ;
    }
    else
    {
        printf("请输入新的联系人\n姓名:");
        scanf("%s",f.name);
        printf("年龄:\n");
        scanf("%s",f.age);
        printf("电话:\n");
        scanf("%s",f.tele);
        printf("qq:\n");
        scanf("%s",f.qq);
        printf("微信:\n");
        scanf("%s",f.weixin);
        printf("生日:\n");
        scanf("%s",f.bd);
        printf("电子邮件:\n");
        scanf("%s",f.email);
        printf("性别:\n");
        scanf("%s",f.sex);
        
        if((fp=fopen("f1.txt","a+"))==NULL)
        {
            printf("File open error!\n");
            exit(0);
        }
        fprintf(fp,"%s%4s%15s%11s%11s%9s%18s%4s\n",f.name,f.age ,f.tele,f.qq,f.weixin,f.bd,f.email,f.sex);

        if(fclose(fp))
        {
            printf("Can not close the file !\n");
            exit(0);
        }
    }
     Count++;
}
/*浏览操作*/
void liulan_friend(struct friends_list friends[])
{
    int i=0;        
    struct  friends_list g;
    FILE  *fp=fopen("f1.txt","r");
    printf(" 姓名  年龄  电话          QQ        微信      生日         电子邮件     性别  \n");
    if(!fp)
    {
        printf("File open error!\n");   
    }
    while(!feof(fp))
    {
        fscanf(fp,"%s%s%s%s%s%s%s%s",g.name,g.age,g.tele,g.qq,g.weixin,g.bd,g.email,g.sex);
        printf("%s%4s%15s%11s%11s%9s%18s%4s\n",g.name,g.age,g.tele,g.qq,g.weixin,g.bd,g.email,g.sex);
    }
    if(fclose(fp))
    {
        printf("Can not close the file!\n");
        exit(0);
    }
   
}
搜索更多相关主题的帖子: include 
2013-05-14 13:12
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:10 
feof(fp) 是已经到了文件最后,但是必须读入超出范围才会返回true
EOF 是在最后的后面
所以,feof别放在那里,他是告诉你现在没超范围,你在文件尾也没超范围,除非再读一次
while(true)
{
fread(...)
if(feof(fp)==true) break
}

Maybe
2013-05-15 00:10
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:0 
这个或许有用:http://hi.baidu.com/jiong0818/item/e8356b11de10d4a5feded558

Maybe
2013-05-15 00:11
锋了
Rank: 7Rank: 7Rank: 7
来 自:向日葵幼儿园
等 级:黑侠
威 望:2
帖 子:306
专家分:586
注 册:2012-10-27
收藏
得分:10 
这个很明显啊!
你看如果改成这样while( fscanf(fp,"%s%s%s%s%s%s%s%s",g.name,g.age,g.tele,g.qq,g.weixin,g.bd,g.email,g.sex)!=E0F)
红色的部分已经读取了你f1.txt里面的第一组数据了,但是你没有输出就在这里又读取了一次,
while(!feof(fp))
     {
         fscanf(fp,"%s%s%s%s%s%s%s%s",g.name,g.age,g.tele,g.qq,g.weixin,g.bd,g.email,g.sex);
         printf("%s%4s%15s%11s%11s%9s%18s%4s\n",g.name,g.age,g.tele,g.qq,g.weixin,g.bd,g.email,g.sex);
     }
所以你的第一组数据就被覆盖掉了,也就不输出了。
这样的话应该你每次都是读取两次的吧,应该都是隔组输出的,也就是输出第2、4、6、8。。。组??

[ 本帖最后由 锋了 于 2013-5-17 11:36 编辑 ]
2013-05-16 22:55
快速回复:求助!问题:文件输出最后一个重复输出和第一个不输出
数据加载中...
 
   



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

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