将文本文件中的矩阵数据存储在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]);
所以,首先我要说我对指针和动态分配还很陌生。目前我正在尝试将包含 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]);