- ベストアンサー
2次元配列を引数とする関数の実行結果が異なる
- 2次元配列を引数とする関数を作成しましたが、実行結果が期待と異なる数字の羅列となりました。
- 配列の宣言や初期化は関数内で行い、値を表示する関数を作成しました。
- 実行結果の数字が正しく表示されない原因を特定することができませんでした。アドバイスをお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>本来の実行結果 >1 2 3 4 5 6 >2 4 6 8 10 12 >3 6 9 12 15 18 >4 8 12 16 20 24 「本来の実行結果」って、この1つのみですか?。 そうだとしたら、 >関数内で表の値を代入・・ する必要はない、と思います。 下のソースを参照願います。 ++++++++++++++++++++++++++++++++++++++++++++++ あくまでも「関数内で表の値を代入」するならば、 前の回答者が指摘した箇所の、 「 [数字][数字]= 」と入力を「促す部分」は、printf() で行うよう《分ける》べきと思います。 http://www.bohyoh.com/CandCPP/C/Library/scanf.html ★ただし、そこでは入力の都度、「本来の実行結果」に合うかチェックが必要で、そのための「配列」が必要となり、 >条件として、int a[数字][数字]={{1,2,3...}}という配列の宣言と同時の初期化は使わず、 本末転倒となります。 「課題」を読み直した方がよろしいかと・・。 #include <stdio.h> void Dainyuu( int b[][ 6 ] ) { int i, j; for( i = 0; i < 4; i++ ){ for( j = 0; j < 6; j++ ){ b[ i ][ j ] = ( i + 1 ) * ( j + 1 ); } } } void HyouPrint( int c[][ 6 ] ) { int i, j; for( i = 0; i < 4; i++ ){ for( j = 0; j < 6; j++ ){ printf( "%d ", c[ i ][ j ] ); } printf( "\n" ); } } void main( void ) { int a[ 4 ][ 6 ]; Dainyuu( a ); HyouPrint( a ); } 注:インデントに全角空白を用いています。コピペ後、タブに一括変換して下さい。
その他の回答 (3)
- Wr5
- ベストアンサー率53% (2173/4061)
訂正。 >それぞれ「全く別のもの」であること func()の int b[4][6] はmain()の int a[4][6] と別ですが、他は「コール元のもの」…でした。 # こんな使い方普段やらないからなぁ… 原因に関しては…既に回答されているscanf()の書き方…でしょう。
- Tacosan
- ベストアンサー率23% (3656/15482)
確実に scanf("b[%d]*[%d]=%d\n",&i,j,b[i][j]); はおかしい.
- Wr5
- ベストアンサー率53% (2173/4061)
>関数内で表の値を代入し、値を表示する関数を作り とりあえず… main()の中の int a[4][6] とfunc()の int a[][6] int b[4][6] とfund()の int b[4][6] がそれぞれ「全く別のもの」であることは理解されてます?