在 C 语言中读取同一循环中具有相同行数的多个文件



我有两个文件,都有 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,&region) == 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",&region);
      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,&region);
  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()。而且您在使用 fclose() 关闭流正在使用fflush().实际上fclose()会导致流刷新,您无需手动刷新它们。

你说了行。然后,必须跳过行尾字符。在fscanf中添加n或使用fseek

首先,那是什么?

int prediction_class, class, region;

classint

fgets (char *_Buf, int _MaxCount, FILE *_File)会做得更好。我在当前的项目中使用它,它工作正常。

相关内容

  • 没有找到相关文章

最新更新