1

假设我想输入一个整数平方。在每一行上,每对整数由一个空格分隔。所以下面的代码工作得很好:

//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]);}
}

所以在这里我不明白为什么不考虑空间(为什么它工作:-))?相反,如果我使用数组 c[N][N],它就不会起作用,因为每个空格都会被解释为数组的输入

4

2 回答 2

1
int N;
scanf("%d",&N);
int c[N][N];   /* Error */

c[][]创建时必须知道的大小。这意味着 N 不能从输入中动态获得。

编辑: 正如 Jonathan Leffler 所指出的,一些编译器支持在运行时确定数组大小。它是 C99 标准的一部分,但在随后的 C11 标准中它是可选的。

虽然可选功能可能很棒,但它们会降低程序的可移植性。

于 2012-08-29T14:36:45.883 回答
0

好吧,基本上,scanf 的每次调用都将以空格分隔。

于 2012-08-29T14:19:22.780 回答