0

私はこれについて頭を悩ませていますが、先に進むことができないので、助けてください。プログラミングの課題に取り組む:

INPUT:
First line contains a value N representing the dimension of the input matrix, followed by N lines, each line representing a row of the matrix. Within each row, N values are given and are separated by whitespace.

そのため、fgets() を使用してから strtol() を使用して数字を抽出する代わりに、scanf() を使用する必要があります。これは、代入プラットフォームが strtol() では適切に機能しないためです。

これは私のプログラムです:

int main()
{
   int N;
   int arr[N][N];
   int idx1, idx2=0;

   scanf("%d ",&N);

   for (idx1=0; idx1<N; idx1++) {
      for(idx2=0; idx2<N; idx2++) {
         scanf("%d", &arr[idx1][idx2]);
         printf("arr[%d][%d]=%d ", idx1, idx2, arr[idx1][idx2]);
      }
   }
   printf("\n");
   for (idx1=0; idx1<N; idx1++) {
      for(idx2=0; idx2<N; idx2++) {
         printf("arr[%d][%d]=%d ", idx1, idx2, arr[idx1][idx2]);
      }
   }

   return 0;
}

出力:

3
1 2 3
arr[0][0]=1 arr[0][1]=2 arr[0][2]=3 
4 5 6
arr[1][0]=4 arr[1][1]=5 arr[1][2]=6 
7 8 9
arr[2][0]=7 arr[2][1]=8 arr[2][2]=9 
arr[0][0]=1 arr[0][1]=4 arr[0][2]=7 arr[1][0]=4 arr[1][1]=7 arr[1][2]=8 arr[2][0]=7 arr[2][1]=8 arr[2][2]=9

FWIW gcc --version gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3

2 番目の出力が最初の出力と一致しないのはなぜですか? ここで何が欠けていますか?

4

2 に答える 2

-2

そのような可変長配列を作成する場合は、サイズ N の配列を作成し (N にはその時点でガベージ値があります)、ユーザー入力に基づいてサイズを変更するのではなく、動的に割り当てる必要があります。malloc または calloc を使用します。

于 2014-03-23T00:53:20.657 に答える