C语言 如何打开一个txt文件并将其内容分配给一个二维数组?

ogq8wdun  于 2022-12-03  发布在  其他
关注(0)|答案(1)|浏览(139)

所以我有一个txt文件,它代表一个矩阵。我需要做的是打开它,并将其内容分配给一个矩阵。
例如:
在我txt文件中,我有:

39  -1 -42 -42 
 -6 -46  89  86 
 76 -62  35  92 
-20  24 -10  38 
 52   1 -86  41

我需要打开一个文件读取其内容并将每个值分别分配到一个矩阵中。
我试过这个,但是,我仍然不能访问一个元素。我想使用strtok()将行分解为令牌作为我的备份计划,但我相信应该有更好的方法。

int matrix[4][5];

  FILE *files;
  char str[100];

  files = fopen("./matrix-samples/m-5-10-a.txt", "r");
  if(files == NULL) {
    printf("%s\n","error" );
    }
  else{
    for (int i = 0; i < 5; i++) {
      fgets (str, 60, files);
      printf("%s", str);
    }

  }
    return 0;
}
2skhul33

2skhul331#

不要使用strtok。第九层地狱包含3个功能:getsscanfstrtok。请避免使用它们。使用fgets读取数据,然后使用strtol系列中的某个元素解析它。例如:

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>

#define ROW 5
#define COL 4

static void
die(int row, int col)
{
    fprintf(stderr, "Invalid input in row %d, near column %d\n", row, col);
    exit(1);
}

int
main(int argc, char **argv)
{
    const char *path = argc > 1 ? argv[1] : "matrix-samples/m-5-10-a.txt";
    int matrix[ROW][COL];
    FILE *ifp = fopen(path, "r");
    char str[256];
    if( ifp == NULL ){
        perror(path);
        return EXIT_FAILURE;
    }
    int row = 0;
    while( row < ROW && fgets(str, sizeof str, ifp ) != NULL ){
        char *p = str;
        for( int col = 0; *p && col < COL; col += 1 ){
            char *end;
            matrix[row][col] = strtol(p, &end, 10);
            if( ! isspace(*end) ){
                die(row, end - str);
            }
            p = end + 1;
        }
        while( isspace(*p) ){
            p += 1;
        }
        if( *p || p[-1] != '\n' ){
            die(row, p - str);
        }
        row += 1;
    }
    if( fgetc(ifp) != EOF ){
        die(row, 0);
    }
    for( int i = 0; i < ROW; i++ ){
        for( int j = 0; j < COL; j++ ){
            printf("%7d", matrix[i][j]);
        }
        putchar('\n');
    }

    return 0;
}

相关问题