是否可以从文件中加载矩阵及其大小?

时间:2020-01-14 10:57:49

标签: c arrays file matrix size

基本上,输入文件应如下所示:

4
1 2 3 4
2 1 4 3
4 3 2 1
3 4 1 2

第一行是方形矩阵的大小。但是,我不能正确地将输入直接加载到n中,然后再加载到矩阵中。我通过创建“加载程序”数组避免了此类问题。

int n, loader[100], p=0;
while(feof(data) == 0) {
    if(p == 0) {
        fscanf(data, "%d", &n); //taking n
        p++;
    } else {
        fscanf(data, "%d", &loader[p]); //taking matrix values for p>0
        p++;
    }
}

//loading the matrix
int mat[n][n], o = 1; //o is set to 1, as the loader
                      //has been loaded from position 1.
for(int i = 0; i < n; i++) {
    for(int j = 0; j < n; j++){
        printf("%d\n", loader[o]);
        mat[i][j] = loader[o];
        o++;
    }
}

但是,我认为这是不必要的,并且可能有一种更快的方法来直接获取矩阵大小及其值。当我以这种方式编程时,我收到了一个欢迎的“分段错误”错误。

1 个答案:

答案 0 :(得分:2)

此代码似乎有效:

int loadMatrix(char *pth)
{
    int i, j, n, **mat, p = 0, num;
    FILE *fd;

    fd = fopen(pth, "r");
    if(fd == NULL) return(-1);

    /* Read matrix size */
    if(fscanf(fd, "%d", &n) == EOF) return(-1);
    printf("Size: %d\n", n);

    mat = malloc(n * sizeof(int *));
    for(i = 0; i < n; i++) mat[i] = malloc(sizeof(int) * n);

    while(fscanf(fd, "%d", &num) != EOF && p < (n * n)) {
        mat[p / n][p % n] = num;
        p++;
    }

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

    for(i = 0; i < n; i++) free(mat[i]);
    free(mat);

    fclose(fd);
    return(0);
}
相关问题