| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 360 人关注过本帖
标题:请教关于fscanf函数的问题
只看楼主 加入收藏
zyuce
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2012-11-25
结帖率:100%
收藏
已结贴  问题点数:15 回复次数:4 
请教关于fscanf函数的问题
程序代码:
fprintf(save,"        Name          Num     Chinese     Math     English     Allscore\n");
    p1=head;
    fprintf(save,"        %-14s%-8d%-12.2f%-10.2f%-12.2f%-0.2f\n",p1->Name,p1->Num,p1->Score.Chinese,p1->Score.Math,p1->Score.English,p1->Allscore);
    while(p1->next!=NULL)
    {
        p1=p1->next;
        fprintf(save,"        %-14s%-8d%-12.2f%-10.2f%-12.2f%-0.2f\n",p1->Name,p1->Num,p1->Score.Chinese,p1->Score.Math,p1->Score.English,p1->Allscore);
    }
    p1->next=NULL;
    fclose(save);
    printf("保存成功!\n");



我是用如上方式将信息保存出去的
在硬盘中打开已保存的文件就是这样
图片附件: 游客没有浏览图片的权限,请 登录注册



这都没有问题   但是就不会怎么将该文件读取了


这是读取部分的代码

程序代码:
int fs=0;
    char filename[20];
    FILE *load;
    printf("请输入要读取的文件名:");
    scanf("%s",&filename);
    if((load=fopen("filename.txt","r+"))==NULL)
    {
        printf("No find!\n");
        return head;
    }
    fseek(load,72,0);
    struct student *p1;
    p1=(struct student *)malloc(length);
    fscanf(load,"        %-14s%-8d%-12.2f%-10.2f%-12.2f%-0.2f",&p1->Name,&p1->Num,&p1->Score.Chinese,&p1->Score.Math,&p1->Score.English,&p1->Allscore);
    head=p1;
    for(;;)
    {
        p1=p1->next;
        p1=(struct student *)malloc(length);
        fs=fscanf(load,"        %-14s%-8d%-12.2f%-10.2f%-12.2f%-0.2f",&p1->Name,&p1->Num,&p1->Score.Chinese,&p1->Score.Math,&p1->Score.English,&p1->Allscore);
        if(fs==EOF)
        {
            p1=NULL;
            break;
        }
    }
    fclose(load);
    printf("读取成功!\n");
    system("pause");
    getchar();
    return head;
搜索更多相关主题的帖子: next head 
2012-12-12 07:13
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
收藏
得分:4 
这是我航空订票系统中的一个功能函数,仅供参考:
  /***********************************************
  ** input()功能函数简介:                        **
 *** 从同文件夹下fly_msg文件中导入航班信息到系统 ***
**** 生成以head开头的链表供全局使用              ****
 *** fly_msg文件以只读打开,文件必须存在          ***
  ** 在director()和traveller()的开头被调用       **
   ***********************************************/
int input()
{
    FILE *fp;
    struct flight *p1=NULL,*p2=NULL;
    char str[100];
    int i,n,m,len;
    fp=fopen("./fly_msg","r");//以只读打开,文件必须存在
    if(fp==NULL)
    {
        perror("fopen of input error");
        exit(1);
    }
    char menu[]="航班号     始发站               终点站               始发时刻  间隔天数  终点时刻  余票数(张)\n";
    fread(menu,strlen(menu),1,fp);//读取首行标题栏
    n=ftell(fp);//获取当前文件指针位置
    fseek(fp,0,2);//文件尾部
    m=ftell(fp);//获取文件总字符个数
    fseek(fp,n,0);//文件开头
    if(n==m)//如果没有航班信息,则返回
    return 0;
    for(i=0;n!=m;i++)//退出条件为文件指针位置到了文件尾部
    {
        memset(str,'\0',sizeof(str));
        len=10+1+20+1+20+1+10+10+10+5;//计算每行信息长度,包括一个'\n'符号
        fread(str,len,1,fp);//读取一行航班信息
        p1=(struct flight*)malloc(sizeof(struct flight));//动态申请新结点内存
        memset(p1->number_fly,'\0',sizeof(p1->number_fly));//清空内存快
        memset(p1->start_addr,'\0',sizeof(p1->start_addr));
        memset(p1->end_addr,'\0',sizeof(p1->end_addr));
        memset(p1->start_time,'\0',sizeof(p1->start_time));
        memset(p1->all_day,'\0',sizeof(p1->all_day));
        memset(p1->end_time,'\0',sizeof(p1->end_time));
        memset(p1->num_ticket,'\0',sizeof(p1->num_ticket));

        sscanf(str,"%10s %20s %20s %10s%10s%10s%4s",\
        p1->number_fly,p1->start_addr,p1->end_addr,\
    p1->start_time,p1->all_day,p1->end_time,p1->num_ticket);//给新结点赋值
    p1->next=NULL;
    if(i==0)
    {
        head=p1;//新结点作为头节点
    }
    else
    {
        p2->next=p1;//新结点作为尾节点
    }
        p2=p1;
        p1=NULL;
        n+=len;//文件指针移动一行大小
    }
    fclose(fp);//关闭文件
    struct flight *a;
    for(a=head;a!=NULL;a=a->next)//打印生成的全局链表,可去掉
    printf("%-10s%-20s%-20s%-10s%-10s%-10s%-4s\n",\
            a->number_fly,a->start_addr,a->end_addr,\
        a->start_time,a->all_day,a->end_time,a->num_ticket);
    return 0;
}

小小战士,战士中的战斗机!
2012-12-12 08:42
daniel_
Rank: 5Rank: 5
等 级:职业侠客
帖 子:212
专家分:307
注 册:2012-11-13
收藏
得分:4 
读取文件怎么不用fgets()?
2012-12-12 09:31
小小战士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:569
专家分:1313
注 册:2012-11-3
收藏
得分:0 
回复 3楼 daniel_
多种实现方法,就看你想用哪一种
fgetc(),fgets(),fread(),fscanf()都行,没有固定的

小小战士,战士中的战斗机!
2012-12-12 09:47
jk_love
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:196
专家分:965
注 册:2012-10-22
收藏
得分:4 
楼主这个 很简单的:
打开文件读一行,然后
sscanf
2012-12-12 12:05
快速回复:请教关于fscanf函数的问题
数据加载中...
 
   



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

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