【问题标题】:Storing matrix data from a text file in a multidimensional array in c将文本文件中的矩阵数据存储在c中的多维数组中
【发布时间】:2021-03-04 23:59:45
【问题描述】:

所以,我先说我对指针和动态分配相当陌生。目前我正在尝试将包含 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(i = 0 ; i &lt; 2... 只迭代两次。如果要读取 3 个值,请使用 for (i=0; i &lt; 3 ...
  • 哦,是的,我现在明白你的意思了。

标签: arrays c dynamic-memory-allocation


【解决方案1】:

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

【讨论】:

  • 知道了,似乎通过改变它实际上迭代了完整的 9 次。这就说得通了。我仍然不明白它是如何没有正确存储整数的。我认为我的 fscanf 语句不正确。
  • 我在我的电脑上运行它,一切正常。没有正确存储整数是什么意思?你还在收垃圾吗?
  • 你看我存储的是奇数 1-17。所以我的矩阵看起来像:1,3,5\n,7,9,11\n,13,15,17。它跳过数字而不是将它们存储在我的二维数组中。
  • 你纠正了两个 for 循环吗?您收到的确切输出是什么?正如我所说,我刚刚更正了两个 for 循环,它在我的计算机上运行良好,所以你的代码是正确的。
  • 我的输出最终是:1,7,13,7,13,15,13,​​15,17。我在帖子上更改了打印语句的代码,我意识到我没有添加 j 来显示矩阵。
猜你喜欢
  • 1970-01-01
  • 2018-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多