【发布时间】:2021-08-21 05:00:25
【问题描述】:
我一直在尝试创建一个 NxN 方阵(方阵的大小由用户确定),但似乎遇到了问题。显示的矩阵实际上是一个对称矩阵,这不是我想要的,因为我希望能够让每个值都保存一个唯一的整数。任何帮助是极大的赞赏。这是我的代码:
#include <stdio.h>
int main()
{
int i;
int j;
int size = 1;
int array [size][size];
printf ("Enter the size you would like for the nxn matrix: ");
scanf ("%d", &size);
printf ("Now enter elements into the matrix. \n");
for (i = 0; i < size; i++)
{
for (j = 0; j < size; j++)
{
printf ("[%d][%d] = ", i, j);
scanf ("%d", &array [i][j]);
}
}
printf ("------------------------\n\n");
printf ("the matrix is: \n\n");
for (i = 0; i < size; i++)
{
for (j = 0; j < size; j++)
{
printf (" %d ", array [i][j]);
}
printf ("\n");
}
return (0);
}
【问题讨论】:
-
int array [size][size];是一个固定大小的数组。它不会因为您稍后更改size变量的值而更改大小。要么将该行移到scanf之后,要么最好仍然使用动态分配。 -
不能只对 printf 和 scanf 使用 array[i][j] 语法,因为编译器不知道下一行从哪里开始
-
@Edmund:如果您使用支持 C99、C11 或 C18 的编译器(并且您应该使用这样的编译器 - 没有太多充分的理由使用仅支持 C90 的编译器,这标准是 30 岁!),并且如果在扫描和验证
size之后代码被固定为定义array,那么您可以完美地使用array[i][j]表示法。如果你想使用malloc()来避免堆栈溢出,你可以写int (*array)[size] = malloc(size * size * sizeof(array[0][0]));(并检查它是否成功)并且仍然使用array[i][j]表示法。这是一个指向 VLA 的指针。
标签: arrays c for-loop linear-algebra