C语言fscanf函数读取结构化数据

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/fz2543122681/article/details/64906521

函数原型:

int fscanf (FILE *__restrict __stream,const char *__restrict __format, ...) 

fscanf()分隔符是;空格、tab、回车,读取成功返回所读的字段数,读取失败或读取结束返回EOF。fscanf()是按照__format的格式读取字段,
如下面代码例子,%s%d%s表示一次读入3个字段,读完第一次后,文件指针fp指向第四个字段,那么第二次从第四个字段开始读,由此循环,直到结束时返回EOF,且看下面例子。

vim buddy

Tom 123 China 
Alex 321 US
#include <stdio.h>
#include <sys/stat.h>
#include<fcntl.h>
#define SIZE 2
int main(int argc, char *argv[])
{
    struct buddy
    {
        char name[50];
        unsigned int tel;
        char address[200];

    };
    struct buddy bd1[SIZE];
    FILE *fp;
    fp=fopen("buddy","rw+");
    int i=0;
    int num=0;
   while(num!= EOF){
num=fscanf(fp,"%s%d%s",bd1[i].name,&bd1[i].tel,bd1[i].address);
       //读完第一行后,指针指向第二行
       printf(" %d",num);
       i++;
    }

    fclose(fp);
    for(i=0;i<SIZE;i++){
        printf("<name>%s <tel>%d <address>%s \n",(bd1+i)->name,bd1[i].tel,bd1[i].address);
    }

}
展开阅读全文

fscanf函数

08-17

下面是一个程序:rn#include rnstruct studentrnrn int num;rn char name[10];rn int score[3];rn int averscore;rnstu[2];rnrnvoid save()rnrn FILE *fsp;rn int i;rn if((fsp=fopen("stud.txt","w"))==NULL) rn rn printf("Cannot open file.\n");rn return;rn rn for(i=0;i<2;i++)rn rn if(fwrite(&stu[i],sizeof(struct student),1,fsp)!=1)rn printf("Write error!\n");rn rn fclose(fsp);rnrnrnvoid print()rnrn FILE *fsp;rn int i;rn if((fsp=fopen("stud.txt","r"))==NULL) rn rn printf("Cannot open file.\n");rn return;rn rn for(i=0;i<2;i++)rn rn fscanf(fsp,"%d%s,%d%d%d%d",stu[i].name,&stu[i].num,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].averscore); rn printf("%3d%5s%3d%3d%3d%3d\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].averscore);rn rn fclose(fsp);rnrnrnrnmain()rnrn int i;rn printf("Please input datas!\n");rn for(i=0;i<2;i++)rn rn scanf("%d%s%d%d%d",&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);rn stu[i].averscore=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3;rn rn save();rn print();rnrn运行结果是正确的,同时在文件夹中产生了stud.txt文件。rn下面是在同一个文件夹下的另一个程序:rn#include rnrnstruct studentrnrn int num;rn char name[10];rn int score[3];rn int averscore;rnstu[2];rnrnvoid print()rnrn FILE *fsp;rn int i;rn if((fsp=fopen("stud.txt","rt"))==NULL) rn rn printf("Cannot open file.\n");rn return;rn rn for(i=0;i<2;i++)rn rn fscanf(fsp,"%d%s,%d%d%d%d",stu[i].name,&stu[i].num,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].averscore); rn printf("%3d%5s%3d%3d%3d%3d\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].averscore);rn rn fclose(fsp);rnrnrnrnmain()rnrn print();rnrnrn这个程序在上一个程序之后运行,因为那个文件夹中已经有了文件stud.txt,为什么输出的结果却不是预期的结果,而是所有的数据都变成了“0”?rnrn诚恳求教,其中,对于文件的名字“stud.txt",本人曾经用过诸如”stud"等代替过(当然两个程序中的都会代替),也尝试过改变打开方式为”rb""rt",都没有效果,实在是令我难以理解。rnrnrn 论坛

没有更多推荐了,返回首页