一个结构体数组成员表列有
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一般都用于二进制文件,指针移动都是以字节计算的,怎么能定位到下一行呢
追答一行所占的字节数可以算出来的,多少个字符就是多少个字节啦