- ベストアンサー
C言語で引数が構造体の場合のプログラム作成方法
- C言語で引数が構造体の場合、どのように引数の部分を書けばいいのか分かりません。
- 引数が構造体の場合、関数の引数として、構造体ポインタを使用します。
- 同様に、引数の値を変更する場合は、ポインタを使用して値を直接変更します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
>としたにもかかわらず、下のようにプリントするときはrankに1がつかないのでしょうか? まず、rank1は関数名、rankはstruct data構造体のメンバ変数名です。 全然別のものです。 rank1関数は、struct data構造体の配列を調べてメンバ変数rankに順位を入れます。 printfで表示するのは、このメンバ変数を表示しなければなりません。 つまり、printfの引数は x[m].rank です。
その他の回答 (2)
- ShaneOMac
- ベストアンサー率39% (356/898)
まずrank1()関数を実行して値をセットアップし、printf()関数では値を取り出すだけにするということです。 printf("%c君 %d点 %d位\n",x[m].name,x[m].score,rank1(x,m)); この文がおかしいんです。なぜprintf()関数の中でrank1()関数を実行しているんですか?値が返る関数ならまだしもこれはvoid関数になっていますよ。 "%d位"に入れたいのは struct dataのint rankなんでしょう?
お礼
すいません。勉強不足であまりよく分かっていなかったもので・・・回答ありがとうございました。
for(m=0;m<5;m++) printf("%c君 %d点 %d位\n",x[m].name,x[m].score,rank1(x,m)); ではなくて、 rank1(x,5); for(m=0;m<5;m++) printf("%c君 %d点 %d位\n",x[m].name,x[m].score,x[m].rank); でしょうね。
補足
ちゃんと実行できました。ありがとうございます。 1つ質問があるんですが、 >rank1(x,5); というrankを定義することをしていなかったのと、x[m].rankというように、rankもメンバの1つのように書けばいいということは分かったんですが、どうして void rank1(struct data *x,int n) としたにもかかわらず、下のようにプリントするときはrankに1がつかないのでしょうか? >for(m=0;m<5;m++) >printf("%c君 %d点 %d位\n",x[m].name,x[m].score,x[m].rank);
お礼
なるほど、そういうことですか。 分かりやすい説明、本当にありがとうございました。