• ベストアンサー

以前勉強していたのですが、教えてください。

今自分でC言語の勉強をしているのですが、解けないプログラムが本に載っていましたので教えてください。 #include<stdio.h> struct DATE_DATA { int yy, mm, dd; }; void sub1(struct DATE_DATA *data, int i); void sub2(struct DATE_DATA *data, int i); void main(void) { int i; struct DATE_DATA data[5]; for(i = 0; i < 5; i++) { sub1(&data[i], i); } for(i = 0; i < 5; i++) { sub2(&data[i], i); } }                                                     void sub1(struct DATE_DATA *data, int i) /&data[i] ,iの {                        アドレスを受け取る/ printf("%d回目\n", i + 1); printf(" year = "); printf("%d", &data->yy); /構造体ポインタ変数名->メンバ名 printf(" month = ");   なのにdataの前に&が付いている/ printf("%d", &data->mm); printf(" day = "); printf("%d", &data->dd); } void sub2(struct DATE_DATA *data, int i) { printf("%d回目 ", i + 1); printf("%02d/", data->yy); /dataの前には&が付いていない/ printf("%02d/", data->mm); printf("%02d\n", data->dd); } 長くなりまして、すみません。質問がプログラムの中にあることも、すみません。 どうしても分からなくて回答をお願いします。

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

  • ベストアンサー
  • yo-kan-62
  • ベストアンサー率18% (18/98)
回答No.1

現在勉強中という事で,ヒントを mainの中で,sub1とsub2を呼出していますが,引数の渡し方はどうしていますか? 又,sub1のprintf関数で表示されるのは何ですか? sub2の表示内容は判りますよね?

hirami
質問者

お礼

ヒントをいただき冷静に考えてみると、sub2を理解することができました。scanfはhitomuraさんに教えていただいたHPを見たり、本を片っ端から取り出して内容を把握することができそうです。本当にありがとうございました。今後も宜しくお願いします。

hirami
質問者

補足

すみません!間違え箇所がありました。 #include<stdio.h> struct DATE_DATA { int yy, mm, dd; }; void sub1(struct DATE_DATA *data, int i); void sub2(struct DATE_DATA *data, int i); void main(void) { int i; struct DATE_DATA data[5]; for(i = 0; i < 5; i++) { sub1(&data[i], i); } for(i = 0; i < 5; i++) { sub2(&data[i], i); }                                                      void sub1(struct DATE_DATA *data, int i) /&data[i] ,iの {                        アドレスを受け取る/ printf("%d回目\n", i + 1); printf(" year = "); scanf("%d", &data->yy); /構造体ポインタ変数名->メンバ名 printf(" month = ");   なのにdataの前に&が付いている/ scanf("%d", &data->mm); printf(" day = "); scanf("%d", &data->dd); } void sub2(struct DATE_DATA *data, int i) { printf("%d回目 ", i + 1); printf("%02d/", data->yy); /dataの前には&が付いていない/ printf("%02d/", data->mm); printf("%02d\n", data->dd); } sub1の部分を全てprintfにしていましたが、悩んでいたのはscanfの部分でした。 回答をおねがいします。間違えていてすみませんでした。

その他の回答 (1)

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.2

(No.1のyo-kan-62さんの回答を見て)…そーか、勉強中ですよね。 では、関連サイトを挙げるだけにします。 scanf()の解説: http://www.microsoft.com/japan/developer/library/vccore/_crt_scanf.2c_.wscanf.htm 演算子の優先順位: http://www.microsoft.com/japan/developer/library/vclang/_clang_precedence_and_order_of_evaluation.htm

hirami
質問者

お礼

ありがとうございます。早速HPを見て、参考にします。 また質問を載せると思いますので、宜しくお願いします。

関連するQ&A