arrays - 将文本文件中的矩阵数据存储在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]);
推荐阅读
- javascript - Datetimepicker 限制开始和结束日期
- python - pip 在安装 pyaudio 时显示错误
- gstreamer - 在 Gstreamer 管道中使用 DeepStream 插件
- javascript - 页面只上传一张图片
- php - 在 javascript 中使用 phantomjs 时如何在 php 中获取 javascript 值
- c - 在 C 中实现 `executeUsingPATH()`
- jenkins - 我正在尝试通过 jenkins 管道配置 jenkins 从站来运行 kaniko 容器,但存在连接问题并出现以下错误
- javascript - 从 javascript 读取 ReactNative App 版本
- codeigniter - 带字段循环的codeigniter字段提交
- c# - DialogContext.BeginDialogAsync() 如何使用构造参数开始对话