假设我想输入一个整数的平方。在每一行上,每对整数由空格分隔。所以下面的代码工作正常:
//size of the square
int N;
scanf("%d",&N);
int **c;
c = malloc(N*sizeof(int*));
for (i=0;i<N;i++)
{ c[i] = malloc(2*sizeof(int));
for (j=0;j<2;j++)
{scanf("%d",&c[i][j]);}
}
所以在这里我不明白为什么不考虑空间(为什么它工作:-))?相反,如果我使用一个n数组c [N] [N],它就不会有效,因为每个空格都会被解释为数组的输入
答案 0 :(得分:1)
int N;
scanf("%d",&N);
int c[N][N]; /* Error */
创建c[][]
时必须知道{{1}}的大小。这意味着无法通过输入动态获得N.
修改强> 正如Jonathan Leffler所指出的,一些编译器支持在运行时确定数组大小。它是C99标准的一部分,但在随后的C11标准中,它是可选的。
虽然可选功能可能很棒,但它们会降低程序的可移植性。
答案 1 :(得分:0)
嗯,基本上,每次调用scanf都会以空格分隔。