代码之家  ›  专栏  ›  技术社区  ›  Jimenemex

在C中读取两列文件

  •  1
  • Jimenemex  · 技术社区  · 6 年前

    我有两列文件,如下所示:

    9 9
    1 2
    3 2
    

    我正试着用 fscanf 并放置 int * buff 作为格式。

    FILE *fp = fopen(argv[1], "r");
    int num_rows = 0;
    int num_columns = 2;
    int i = 0;
    int j = 0;
    
    int *buff = calloc(10, num_columns * sizeof(int));
    

    我的问题是我不知道该放什么 fscanf(fp, %d %d\n, idk1, idk2)

    我想把它们放进去 buff ,但我不知道在哪个地方。

    for(i = 0; i < num_columns; i++) {
        for(j = 0; j <= num_rows; j++){
            int line = fscanf(fp, "%d %d\n", &buff[num_columns], &buff[num_rows]);
            if(line == EOF){
                break;
            }
            if(num_rows % 10 == 0){
                num_rows += 10;
                buff = realloc(buff, num_rows * num_columns * sizeof(int));
            }
        }
    }
    

    我正在读取我认为相同位置的值,但我看不到相同的输出。

    for(i = 0; i < num_rows; i++){
      for(j = 0; j < num_columns; j++){
          printf("%d", buff[i * num_columns + j]);
      }
      printf("\n");
    }
    

    我将此视为输出:

    92
    20
    00
    00
    00
    ...
    ...
    

    但它应该只匹配输入文件:]

    9 9
    1 2
    3.2
    

    我应该在里面放什么 fscanf公司 作为获取稍后在内部打印的相同数据的位置 memarray[i * num_columns + j]; ?

    1 回复  |  直到 6 年前
        1
  •  2
  •   restless_soul469    6 年前

    我想你想储存的是每一行。在您的代码中 fscanf(fp, "%d %d\n", &buff[num_columns], &buff[num_rows]) 是错误的。您应该使用一些索引表达式 i j 而不是使用 num_rows num_columns 。基本上,你在 buff[num_columns] buff[num_rows]

    您希望逐行读取文件,然后可以仅使用单循环。绕一圈 for(j = 0; j <= num_rows; j++) 并尝试使用存储 fscanf(fp, "%d %d\n", &buff[ num_rows*num_columns ], &buff[ num_rows * num_columns + 1 ] )

    我也不知道你为什么用 num_rows += 10; 它可能会干扰循环的索引。如果要为10个新行分配内存,只需 num_rows*10 而不是 num\u行 在里面 realloc(buff, num_rows * num_columns * sizeof(int))