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

标签 c file stream scanf

我有两个文件,都有 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()。并且您正在使用 fflush() after 使用 fclose() 关闭流。实际上 fclose() 会导致流刷新,您不需要手动刷新它们。

关于c - 在C中的同一循环中读取具有相同行数的多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19541572/

相关文章:

c - 警告 : format '%lu' expects argument of type 'long unsigned int' , 但参数 4 的类型为 'long unsigned int *' [-Wformat]

Android - 处理内部存储中的文件

C# WPF 如何从字节数组加载 FontFamily?

ios - 无法写入使用 CFStreamCreatePairWithSocket 成功创建的 CFWriteStream

logging - 如何让nginx打印tcp流的完整日志

c - 将最低有效位从 4 字节数组重新分配到半字节

c - 操作系统是用什么C写的?

file - 如何获取具有特定扩展名的所有文件的路径

node.js - 模块初始化错误 : Error at Object. fs.openSync (fs.js :646:18) at Object. fs.readFileSync (fs.js:551:33)

c++ - `pow` 不返回 (IEEE) 非规范化 float ?