如果我理解您的原始代码应该做什么,那么这段代码应该真正做到(并再次打印出来以证明它有效)。
您需要动态分配数组,因为它是可变大小的(在 C99 中,您可以在堆栈上使用可变大小的数组,但这确实是一个不同的讨论)。
scanf 将自动忽略整数之间的空格(包括空格和换行符),因此您无需手动解析。
#include <stdlib.h>
#include <stdio.h>
int main()
{
int i=0, j=0, N;
int **c;
scanf("%d",&N);
c = malloc(N*sizeof(int*));
for (i=0;i<N;i++)
{
c[i] = malloc(N*sizeof(int));
for (j=0;j<N;j++)
{
scanf("%d",&c[i][j]);
}
}
for (i=0;i<N;i++)
{
for (j=0;j<N;j++)
{
printf("%d ",c[i][j]);
}
printf("\n");
free(c[i]);
}
free(c);
return 0;
}
为了完整性而没有 malloc/free 的 C99 替代方案(我从不喜欢这个 C99 功能,因为无法检查堆栈上的空间是否足够):
#include <stdlib.h>
#include <stdio.h>
int main()
{
int i=0, j=0, N;
scanf("%d",&N);
int c[N][N];
for (i=0;i<N;i++)
{
for (j=0;j<N;j++)
{
scanf("%d",&c[i][j]);
}
}
for (i=0;i<N;i++)
{
for (j=0;j<N;j++)
{
printf("%d ",c[i][j]);
}
printf("\n");
}
return 0;
}