C语言 关于循环读取多行文件的问题

请问,我有以下程序段,而且能够成功实现2个文件中的多行数据比较功能,但我不知道,
#include <stdio.h>
#include <string.h>
main()
{
int AS1=0,AS3=0,BS1=0,BS2=0,BS3=0;
float AS2=0;
char lineA[100]={0},lineB[100]={0},AS0[13]={0},BS0[13]={0};
FILE *fpA,*fpB,*fpC;
fpA = fopen("A.txt","r");
fpC = fopen("C.txt","w");
fprintf(fpC,"数量\t大小\t属性\t地点\t时间\t顺序\n");
fgets(lineA,sizeof(lineA)-1,fpA);
while ( fscanf(fpA,"%s %d %f %d\n",AS0,&AS1,&AS2,&AS3)!=EOF )
{
fpB = fopen("B.txt","r");
fgets(lineB,sizeof(lineB)-1,fpB);
while ( fscanf(fpB,"%s %d %d %d\n",BS0,&BS1,&BS2,&BS3)!=EOF )
{
if (strcmp(AS0,BS0)==0)
{
fprintf(fpC,"%d\t%.1f\t%d",AS1,AS2,AS3);
fprintf(fpC,"\t%d\t%d\t%d\n",BS1,BS2,BS3);
}
}
fclose(fpB);
}
fclose(fpA);
fclose(fpC);
}
while ( fscanf(fpB,"%s %d %d %d\n",BS0,&BS1,&BS2,&BS3)!=EOF )
这个语句读到多行数据尾后是如何回到fB文件首的?

这段程序应该是存在问题的,在第一个while循环里你打开了文件B.txt,退出循环前已经关闭,即在第二个while循环的时候,B.txt文件是关闭的,所以while ( fscanf(fpB,"%s %d %d %d\n",BS0,&BS1,&BS2,&BS3)!=EOF )这句代码会出错,可以这样
fpB = fopen("B.txt","r");

while ( fscanf(fpB,"%s %d %d %d\n",BS0,&BS1,&BS2,&BS3)!=EOF )

{}
这其实是重新打开了文件B.txt,自然数据指针是在文件首的追问

可是没有提示错误,比较也正常的,第一个循环后已经关闭,第二个循环又打开了呀,您说的没太懂啊?

追答

嗯,因为你把fpB = fopen("B.txt","r");这句代码一直放在第一个while里循环,也就是说循环一次就打开关闭文件一次,文件重新打开,数据指针在文件首。

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