アプリ版:「スタンプのみでお礼する」機能のリリースについて

2次元配列を引数とする関数について
私は今、2次元配列を引数とする関数の表を作るという課題に取り組んでいます。
条件として、int a[数字][数字]={{1,2,3...}}という配列の宣言と同時の初期化は使わず、
関数内で表の値を代入し、値を表示する関数を作り、事実上二つの関数を作るというものです。

私は以下のようなプログラムを作り、動かしましたが、[数字][数字]=********のような本来
あるべき実行結果とは異なる数字の羅列が出てきてしまいました。

#include <stdio.h>


void func(int a[][6]);
void fund(int b[4][6]);
void main(void)
{
int a[4][6];

fund(a);

func(a);
}
void func(int a[][6])
{
int i,j,b[4][6];

fund(b);

for(i=0;i<4;i++)
      {
for(j=0;j<6;j++)
{
printf("a[%d][%d]=%d\n",i,j,a[i][j]);

printf("\n");
}
}
}
void fund(int b[4][6])
{
int i,j;

for(i=0;i<4;i++)
{
for(j=0;j<6;j++)
         {
scanf("b[%d]*[%d]=%d\n",&i,j,b[i][j]);
}
}
}

本来の実行結果
1 2 3 4 5 6
2 4 6 8 10 12
3 6 9 12 15 18
4 8 12 16 20 24

紙にも書いて何回も見直しましたが、どこがおかしいのかわかりませんでした。
どうすれば良いのでしょうか?
何か良いアドバイスをよろしくお願いします。

A 回答 (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 );
}
注:インデントに全角空白を用いています。コピペ後、タブに一括変換して下さい。
    • good
    • 0

訂正。


>それぞれ「全く別のもの」であること

func()の
int b[4][6]
はmain()の
int a[4][6]
と別ですが、他は「コール元のもの」…でした。
# こんな使い方普段やらないからなぁ…

原因に関しては…既に回答されているscanf()の書き方…でしょう。
    • good
    • 0

確実に


scanf("b[%d]*[%d]=%d\n",&i,j,b[i][j]);
はおかしい.
    • good
    • 0

>関数内で表の値を代入し、値を表示する関数を作り



とりあえず…
main()の中の
int a[4][6]
とfunc()の
int a[][6]
int b[4][6]
とfund()の
int b[4][6]
がそれぞれ「全く別のもの」であることは理解されてます?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!