- ベストアンサー
以前勉強していたのですが、教えてください。
今自分で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); } 長くなりまして、すみません。質問がプログラムの中にあることも、すみません。 どうしても分からなくて回答をお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
現在勉強中という事で,ヒントを mainの中で,sub1とsub2を呼出していますが,引数の渡し方はどうしていますか? 又,sub1のprintf関数で表示されるのは何ですか? sub2の表示内容は判りますよね?
その他の回答 (1)
- hitomura
- ベストアンサー率48% (325/664)
(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
お礼
ありがとうございます。早速HPを見て、参考にします。 また質問を載せると思いますので、宜しくお願いします。
お礼
ヒントをいただき冷静に考えてみると、sub2を理解することができました。scanfはhitomuraさんに教えていただいたHPを見たり、本を片っ端から取り出して内容を把握することができそうです。本当にありがとうございました。今後も宜しくお願いします。
補足
すみません!間違え箇所がありました。 #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の部分でした。 回答をおねがいします。間違えていてすみませんでした。