我有两个文件,都有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);
}
答案 0 :(得分:5)
而不是fscanf()
,您应该使用fgets()
获取每一行,并使用sscanf()
从行中获取格式化输入。
对于已修改的问题,我发现至少有两个问题:您仍在使用fscanf()
,而它应该是sscanf()
。您在使用fflush()
关闭流后,使用fclose()
<{1}} 。实际上fclose()
将导致流刷新,您不需要手动刷新它们。
答案 1 :(得分:1)
你说过了。然后,您必须跳过行尾字符。在\n
中添加fscanf
或使用fseek
。
答案 2 :(得分:1)
首先,那是什么?
int prediction_class, class, region;
class
为int
?
fgets (char *_Buf, int _MaxCount, FILE *_File)
将更好地完成工作。
我在我当前的项目中使用它并且工作正常。