我有两个文件,都有 47k 行。我试图同时读取每个文件的行。问题是只读取每个文件的第一行。那是我写的代码:
id_region = fopen(argv[3], "r");
prediction=fopen(argv[4], "r");
int prediction_class, class, region;
while ((fscanf(id_region,"%d 1:%d",&class,®ion) == 2) && (fscanf(prediction,"%d",&prediction_class) == 1))
{
fprintf(stderr,"\nRegião %d",region);
fprintf(stderr,"\nClasse %d",class);
fprintf(stderr,"\nPredição %d",prediction);
}
我的代码有什么问题?
编辑:我试过这段代码,但是当我运行它时出现段错误。这里有什么问题吗?
int main(int argc, char** argv)
{
FILE* id_region;
FILE* prediction;
id_region = fopen(argv[1], "r");
prediction=fopen(argv[2], "r");
char line[50];
char line2[50];
int prediction_class,region,temp1,temp2;
while((fgets (line,10,prediction) != NULL) && (fgets (line2, 10, id_region)!=NULL))
{
//formating the input
temp1=fscanf(line,"%d",&prediction_class);
temp2=fscanf(line2,"%d",®ion);
fprintf(stderr,"\nRegion: %d",region);
fprintf(stderr,"\nPrediction: %d",prediction_class);
}
fclose(prediction);
fflush(prediction);
fclose(id_region);
fflush(id_region);
return(0);
}
已通过此代码解决 - 谢谢!
int main(int argc, char** argv)
{
FILE* id_region;
FILE* prediction;
id_region = fopen(argv[1], "r");
prediction=fopen(argv[2], "r");
char line[50];
char line2[50];
int prediction_class,region,class;
contador=0;
while((fgets(line,10,prediction)!= NULL) && (fgets(line2, 20, id_region)!=NULL))
{
sscanf (line,"%d", &prediction_class);
sscanf (line2,"%d 1:%d",&class,®ion);
fprintf(stderr,"\nRegion: %d",region);
fprintf(stderr,"\nPrediction: %d",prediction_class);
}
fclose(prediction);
fflush(prediction);
fclose(id_region);
fflush(id_region);
return(0);
}
最佳答案
代替fscanf()
,您应该使用fgets()
获取每一行,并使用sscanf()
获取格式化输入从线条。
对于编辑后的问题,我至少发现了两个问题:您仍在使用 fscanf()
,而它应该是 sscanf()
。并且您正在使用 fflush()
after 使用 fclose()
关闭流。实际上 fclose()
会导致流刷新,您不需要手动刷新它们。
关于c - 在C中的同一循环中读取具有相同行数的多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19541572/