【发布时间】:2016-04-28 06:44:13
【问题描述】:
每次我在工作中找到一个很好的解决方案时,总是开始用 C 编码来破坏这种感觉......:D
所以我来了,正在学习一些简单的 C 代码,想知道为什么它不工作 o.O 我想用二维数组(数组数组)表示一个矩阵并从文本文件中填充它。代码很糟糕,代码很丑......我对我能从你那里得到的任何提示/技巧感兴趣,高级先生:)
我的逻辑有什么问题?引擎盖下是什么?我使用[] 操作符是否不如预期?我只是不知道如何遍历二维数组吗?我在 Windows 上使用 cl 编译这个源代码,使用 for() 中的声明,上帝知道还有什么不是严格类似于 C 的。
输入是一个文本文件,其中包含矩阵的大小和由空格分隔的元素。其语法:file := {n, A | n :-N, A := N^(n*n)}
例如:
3
1 3 2
4 5 2
7 0 1
所以这里是……躲起来!
#include <stdio.h>
int main(int argc, char **argv) {
打开文件,最小代码没有错误检查:)
FILE *fp = fopen("mat_mul.test", "r");
现在,根据文件中的第一个整数分配数组...这样正确吗?有没有更好的分配数组的方法?
int n = fgetc(fp) - '0';
int **A = (int**) malloc(sizeof(int*) * n);
for (int i = 0; i < n; i++)
A[i] = (int*) malloc(sizeof(int) * n);
Aaand,这就是魔法,咒语已经背叛了它的主人:D
char act;
int i = 0, j = 0;
while (EOF != (act = fgetc(fp)))
if ('0' <= act && '9' >= act)
A[j == n - 1 ? i++ : i][j == n - 1 ? j = 0 : j++] = act - '0';
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("A[%i][%i]=%i\n", i, j, A[i][j]);
}
}
清洁不彻底!
if (fclose(fp)) {
return 0;
}
【问题讨论】:
-
以
char act;开头->int act; -
正如您所知,
fgetc也读取单个字符。猜猜第一行有多少个字符?不是一个,而是 两个,你忘记了换行符。我建议学习使用调试器,这样您就可以单步调试代码,同时能够监控所有变量的值。 -
但是由于每次迭代中的 if() 都会被忽略,还是我错了?
-
您的问题到底是什么?请注意,诸如“您对此代码有何看法”之类的开放式问题不适合 Stackoverflow。如果您提出具体的问题,SO 效果最好。
-
完全同意这一点,并且已经发现了一个可能的错误:在填充数组时,我使用了后缀
++运算符的荣耀,但是当我必须将第二维设为 0 时,它会这样做在 1-1 上。不是在分配之后。我的问题是:我的动态数组处理错误,还是算法错误。我认为算法:)
标签: c arrays matrix multidimensional-array