将文本文件中的矩阵数据存储在c中的多维数组中

Storing matrix data from a text file in a multidimensional array in c

所以,首先我要说我对指针和动态分配还很陌生。目前我正在尝试将包含 3x3 整数矩阵的文件存储到二维数组中。我试过调试我的代码,我注意到它读取了我的前 2 个值,但随后开始在我的二维数组中生成随机垃圾。我假设我错误地存储了我的整数并且我的逻辑存在缺陷,但是当我一直试图思考它时,我似乎无法找到它可能不正确的地方,因为它们正在从 [0][0 ]、[0][1]等

这是我的代码供参考。谢谢,对于如何针对此特定案例和未来问题解决此问题的一些指导,我将不胜感激。

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

int main() {
    FILE* fpM1;

    fpM1 = fopen("m1.txt", "r");

    int i, j, row1 = 2, col1 = 2;

    int* ptrM1 = (int* )malloc(9 * sizeof(int));

    if (fpM1 != NULL) {

        for (i = 0; i < row1; i++) {
            for (j = 0; j < col1; j++) {

                fscanf(fpM1, "%d", ((ptrM1 + i) + j));

            }
        }

        for (i = 0; i < row1; i++)
            for (j = 0; j < col1; j++) {
                {

                    printf(" %d", *((ptrM1 + i) + j));

                }
            }
    }

    free(ptrM1);
    fclose(fpM1);
    return 0;
}

您的 for 循环结束得太快了。您应该使用 <= 而不是 <。在那之后,一切似乎都很完美。

也许你应该考虑在打印数组的过程中在外部for循环中添加新行。这将有助于清晰:

for (i = 0; i < row1; i++) {
  for (j = 0; j < col1; j++) {
    printf(" %d", *(ptrM1 + i));
  }
  printf("\n");
}

此外,在第一个 printf 语句之前,您不需要那些双括号。在 C 中,您可以在没有上下文的情况下放置许多作用域,但您不应该无缘无故地这样做。

编辑:它实际上不起作用。从文件中读取应该以这种方式完成:

fscanf(fpM1, "%d", ptrM1 + (i * (col1 + 1) + j));

和打印:

printf(" %d", ptrM1[i * (col1 + 1) + j]);