C语言如何用fscanf按行读取一段固定格式

2024-11-13 11:15:08
推荐回答(2个)
回答1:

在fscanf的第二个参数,格式字符串中,指定对应的格式即可。
fscanf与scanf类似,可以格式化输入一组数据,不过不是从终端,而是从对应文件中。

其声明为:
int fscanf(FILE *fp, const char *fmt, ...);
功能为从打开的文件fp中,根据fmt格式字符,读取数据到后续参数中,并返回实际读取的个数。

比如,文件中存着以逗号分隔的三个整型数值,那么将其读取的操作即
fscanf(fp,"%d:%d:%d",&a,&b,&c);
其中,fp为打开的文件指针,abc分别是三个整型变量。

回答2:

你可以用fgets()按行读取内容到 字符串变量里,然后处理。
假如已读入到 str[80] 里:
char str[80]="OR2_X2 C401 ( .A1(n66), .A2(n85), .ZN(N142) )";
多行这样的文字格式,
如果位置固定,可以直接读出:
char r[4][5];
sscanf(str,"%s",r[0]); r[0][3]='\0';printf("%s\n",r[0]);
sscanf(str+18,"%s",r[1]); r[1][2]='\0';printf("%s\n",r[1]);
sscanf(str+28,"%s",r[2]); r[2][3]='\0';printf("%s\n",r[2]);
sscanf(str+38,"%s",r[3]); r[3][4]='\0';printf("%s\n",r[3]);
------------------------
如果位置不固定,我们可以用查找 点号的位置加4:
int i,j,L[3];
j=0;
for (i=0;iif (str[i]=='.'){L[j]=i+4; j++;}
}
sscanf(str,"%s",r[0]); r[0][3]='\0';printf("%s\n",r[0]);
sscanf(str+L[0],"%s",r[1]); r[1][2]='\0';printf("%s\n",r[1]);
sscanf(str+L[1],"%s",r[2]); r[2][3]='\0';printf("%s\n",r[2]);
sscanf(str+L[2],"%s",r[3]); r[3][4]='\0';printf("%s\n",r[3]);