• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語で、引数が構造体の場合)

C言語で引数が構造体の場合のプログラム作成方法

このQ&Aのポイント
  • C言語で引数が構造体の場合、どのように引数の部分を書けばいいのか分かりません。
  • 引数が構造体の場合、関数の引数として、構造体ポインタを使用します。
  • 同様に、引数の値を変更する場合は、ポインタを使用して値を直接変更します。

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

  • ベストアンサー
noname#6581
noname#6581
回答No.3

>としたにもかかわらず、下のようにプリントするときはrankに1がつかないのでしょうか? まず、rank1は関数名、rankはstruct data構造体のメンバ変数名です。 全然別のものです。 rank1関数は、struct data構造体の配列を調べてメンバ変数rankに順位を入れます。 printfで表示するのは、このメンバ変数を表示しなければなりません。 つまり、printfの引数は x[m].rank です。

secret-goo
質問者

お礼

なるほど、そういうことですか。 分かりやすい説明、本当にありがとうございました。

その他の回答 (2)

  • ShaneOMac
  • ベストアンサー率39% (356/898)
回答No.2

まずrank1()関数を実行して値をセットアップし、printf()関数では値を取り出すだけにするということです。 printf("%c君 %d点 %d位\n",x[m].name,x[m].score,rank1(x,m)); この文がおかしいんです。なぜprintf()関数の中でrank1()関数を実行しているんですか?値が返る関数ならまだしもこれはvoid関数になっていますよ。 "%d位"に入れたいのは struct dataのint rankなんでしょう?

secret-goo
質問者

お礼

すいません。勉強不足であまりよく分かっていなかったもので・・・回答ありがとうございました。

noname#6581
noname#6581
回答No.1

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); でしょうね。

secret-goo
質問者

補足

ちゃんと実行できました。ありがとうございます。 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);