• ベストアンサー

構造体の配列について

構造体配列を使った簡単なプログラムを組んでいるのですが、以下のソースコードをコンパイルし、実行したのですが、うまくいきません。 どなたかお力をお貸しください。 ・やりたい事 配列に以下のようにデータをscanf関数を使って入れたいです。 ----[0]---[1]---[2]--- [0] 1 | "あ" | "猫" | [1] 2 | "い" | "亀" | [2] 3 | "う" | "狐" | -登録する内容 番号、名前、好きなもの動物 ■ソース #include <stdio.h> struct hyou { int box[3][3]; }; int main(){ struct hyou *da; int i; for(i=0;i<2;i++){ printf("番号:\n");   scanf("%d",&da->box[i][0]); printf("名前:\n");   scanf("%s",&da->box[i][1]); printf("好きなもの:\n");   scanf("%s",&da->box[i][2]); } //テスト(2件表示) for(i=0;i<2){ printf("番号:\n"); printf("%d",a->box[i][0]); printf("名前:\n"); printf("%s",a->box[i][1]); printf("好きなもの:\n"); printf("%s",a->box[i][2]); } } //構造体配列の意味が違っていたらすみません。 以上、宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

このデータの構造体の場合 struct hyou {   int nID;   char sName[3];   char sType[3]; }; と定義したほうがいいでしょう また struct hyou *da; と 構造体のポインタのみを宣言して その実体を定義しないで ポインタを使うのはよくないですよ どこか とんでもないところのデータを書き換えてしまう場合があります 使うなら struct hyou da[3]; と実体を作成し アクセスするためのポインタを struct hyou *pda; などと宣言し 初期化を pda = &da[0]; のように初期化します scanfへの使い方なども scanf( "%d", &(pda->nID) ); といった具合に使います 質問の趣旨を取り違えているならご容赦ください

skyforce
質問者

お礼

回答ありがとうございます。 回答して頂いた通りに行って見たところ、 うまく実行させることができました。 ありがとうございました。

その他の回答 (2)

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.2

構造体の配列を実装する前に、 構造体の定義について正しく理解される方がよいと思います。 そこで、今回話題となっている、 >番号、名前、好きなもの動物 をメンバーとする構造体を定義してみてください。このとき、 番号:int型 名前:char型の配列(大きさは適切に) 好きな動物:char型の配列(大きさは適切に) とするのが、おそらく一般的でありましょう。

skyforce
質問者

お礼

回答ありがとうございます。 構造体の定義が正しく理解していませんでした・・・。 asuncionさんの言う通りに修正して見ます。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

>struct hyou { >int box[3][3]; >}; これでは構造体を使っている意味がありません。 単に int box[3][3]; と定義する方が、ソースコードがよほど簡単になります。 それに、番号はともかく、名前や好きな動物名までint型というのは、 明らかに不合理ですよね。

skyforce
質問者

お礼

回答ありがとうございます。 >単に >int box[3][3]; >と定義する方が、ソースコードがよほど簡単になります。 確かに上記のように使う方がいいですね・・・。 >それに、番号はともかく、名前や好きな動物名までint型というのは、 >明らかに不合理ですよね。 名前や好きな動物名はint型ではなく、char型の方が適していますね。 もう少し考えて見ます。

関連するQ&A