C语言从文本文件提取信息赋值给结构体数组

一个结构体数组成员表列有
int time
char type
int num
文本文件中每一行格式都是
t=1,a2
t=6,b8
怎么实现从文件读取一行数据,然后分别把t的值赋给time,把a赋给type,把2赋给num
额,文本文件格式应该是
t=1,r=a2
t=6,r=b8
这样

用fscanf函数来读取

#include "stdio.h"

#define TOTALLINE 4//你的文件有多少行就定义成多少,我例子4 行

struct  Mystruct

{

 int time;

 char type;

 int num;

};

int main() 

{

     FILE *fp;

     Mystruct s[TOTALLINE];

     int i;

     

     if((fp=fopen("in.txt","rt"))==NULL)

     {

          printf("cannot open file\n");

          return 1;

     }

     

     for(i=0;i<TOTALLINE;i++)

     {

          fscanf(fp,"t=%d",&s[i].time);

          fscanf(fp,",");

          //如果是t=6,r=b8的格式,改成fscanf(fp,"r=%c",&s[i].type);

          fscanf(fp,"%c",&s[i].type);

          fscanf(fp,"%d",&s[i].num);

          fscanf(fp,"\n");

     }

     for(i=0;i<TOTALLINE;i++)

     {

            printf("Time:%d\nType:%c\nNum:%d\n",s[i].time,s[i].type,s[i].num);

     }

     fclose(fp);

     return 0;

 

}

结果:

追问

我写的不是主函数,每需要读取一行就调用一次这个函数,这样的话就不需要循环和定义TOTALLINE是不是?

追答

那还得加上定位文件指针位置,因为你肯定是想,读完一行,这个文件指针就应该指向下一行。

追问

对啊,那怎么改变文件位置指针标记呢,用fseek么

追答

是的
每次打开文件,都用fseek来定位你要读取的位置,然后再读,应该就可以了

追问

可是fseek一般都用于二进制文件,指针移动都是以字节计算的,怎么能定位到下一行呢

追答

一行所占的字节数可以算出来的,多少个字符就是多少个字节啦

温馨提示:答案为网友推荐,仅供参考
相似回答