【问题标题】:Creating a 3D Array from an input file?从输入文件创建 3D 数组?
【发布时间】:2013-08-04 07:29:13
【问题描述】:

我想将输入文件中的以下行存储到 3D 数组中(不包括第一行。)第一行表示以下行数。

3

4 9368 86 843 23224

4 7323 2 2665 2665

8447 47 843 5278 8378 2273

我的问题是如果我使用 fscanf,则无法判断何时有换行符。因此我无法停止扫描并转到最外层数组中的下一个索引。如果我使用 fgets 和 sscanf,我只能读取每行的第一个字符串(在这种情况下,4 然后 4 然后 8447。)

那是因为 fgets 将整行作为一个字符串(1D 数组)处理,而我希望将每一行作为 2D 数组处理,然后将每行存储在最外层的数组中,从而产生 3D 数组。

我该如何解决这个问题?

【问题讨论】:

    标签: c file input std multidimensional-array


    【解决方案1】:

    您可以使用sscanf() 结合fgets() 一次解析一个数字。您可以通过在解析每个数字时将指针推进到字符串中来做到这一点。

    while (fgets(buf, sizeof(buf), infile) != 0) {
        const char *p = buf;
        size_t len = strlen(buf);
        int val;
        int n;
        while (sscanf(p, "%d%n", &val, &n) == 1) {
            /*...do something with val */
            p += n;
            if (p >= buf+len) break;
        }
    }
    

    %n 指令提供到目前为止在扫描中消耗的字节数。

    【讨论】:

      【解决方案2】:
      #include <stdio.h>
      #include <stdlib.h>
      #include <string.h>
      
      int main(void){
          char array[16][16][16];
          char line[256];
          FILE *fp = fopen("data.txt", "r");
          fgets(line, sizeof(line), fp);
          int row = atoi(line);
          int i;
          for(i = 0;i<row;++i){
              int col = 0;
              char *p;
              fgets(line, sizeof(line), fp);
              for(p = strtok(line, " \t\n");p;p=strtok(NULL, " \t\n")){
                  strcpy(array[i][col++], p);
              }
              array[i][col][0] = '\0';
          }
          fclose(fp);
          {//check
              for(int i=0;i<row;++i){
                  for(int j=0;array[i][j][0];++j)
                      printf("%s ", array[i][j]);
                  printf("\n");
              }
          }
          return 0;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-07
        • 1970-01-01
        • 2013-02-23
        • 2018-07-28
        • 2015-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多