0

2 次元行列に関する問題を解こうとしましたが、残念ながら行列の入力でエラーが発生しました。これはコードです:

int arr[4][4];
int r, c;
scanf("%d", &r);
scanf("%d", &c);
int i, j;
fflush(stdin);
for(i = 0; i < r; i++)
    for(j = 0; j < c; j++)
        scanf("%d", &arr[i][j]);

これを実行すると、追加の入力が必要になります。
例: if r = 2and c = 2> then 6 回の入力が必要で、ハングします。何をすべきか?

4

4 に答える 4

1

私はあなたのコードをコピーして実行しようとしましたが、 rcを制限よりも大きくすると、あなたが言った動作を示していることがわかりました。したがって、適切な制限を使用してください。

于 2012-07-05T14:17:43.240 に答える
1

r=2 かつ c=2 の場合、最初の 2 scanf を実行し、次に 2D ループの 2x2 scanf を実行します。

これにより、2 + 2x2 = 6 になります。

最後の scanf の後、プログラムが終了した場合は、単純に終了します。これは正常です。

于 2012-07-04T19:11:04.843 に答える
0

あなたのコードの問題は、配列に一定量のスペースを割り当てたが、ループの境界をユーザー提供rc変数にすることで、ユーザーが任意の数の入力を提供できるようにしたことだと思います。したがって、ユーザーが and を提供するr=6c=6、ある時点でループが を逆参照しようとしますがarr[5][5]、これは を定義しているため無効ですint arr[4][4];。ユーザーが必要な数の行と列を作成できるようにする場合は、次のようにarr、ユーザー提供の入力で初期化する必要があります。

int r,c;
scanf("%d",&r);
scanf("%d",&c);
int arr[r][c];
于 2012-07-04T19:29:10.237 に答える
-1

あなたのコードでは、単純にループを実行しました。どれだけの値がスキャンされるかは、実行されたループの数によって異なります。r=1,c=1 を取るとします。この条件では、すべての "r" 値に対して c が 1 回実行されます。そのため、値がその時の配列サイズよりも大きくなると、異常な動作が発生します。

最初に「c」の値を入力し、その後「r」を入力すると、正常に動作します。

int r, c;
scanf("%d", &r);
scanf("%d", &c);
int arr[r][c];
于 2013-06-11T06:28:01.080 に答える