首页 > 解决方案 > 将文本文件中的矩阵数据存储在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;
}

标签: arrayscdynamic-memory-allocation

解决方案


你的 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]);

推荐阅读