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 に答える