- ベストアンサー
n人の教科ごとの最高点、最低点を求めるプログラム
- C言語で、n人の教科ごとの最高点と最低点を求めるプログラムを作成しています。
- プログラムでは、国語、数学、英語の3教科の点数を入力し、最高点と最低点を同時に求める関数を使用しています。
- しかし、コンパイルすると「(☆):パラメータの型1が関数宣言と一致しません。」というエラーが発生します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
よくみたら、プロトタイプと実際の定義が不一致です > void minmax(struct score, int, struct score *, struct score *); →void minmax(struct score [], int, struct score *, struct score *); > minmax(struct score s, int n, struct score *minscore, struct score *maxscore) > ということですか? 違います。対処法が逆です。 関数minmaxで受け取りたいのは、struct scoreの配列全体ですから、 > minmax(s[MAX], n, &min, &max); <------------(☆) → minmax(s, n, &min, &max); です。 宣言で 「struct score s[MAX]」となっていますが、これは、「『s』という名前のstruct score がMAX個の配列」であって、「『s[MAX]』という名前のstcruct scroreの配列」ではないです。 配列全体を示す変数は s であって s[MAX]ではありません。 #defineで定義したマクロはコンパイル前の置き換わります。s[MAX]は実際にはs[100]としてコンパイルされます。そう考えれば、s[0],s[1]といったものと同じだということがおわかりいただけるのではないでしょうか。
その他の回答 (1)
- kmee
- ベストアンサー率55% (1857/3366)
s[MAX] は struct scoreの配列s の要素の一つであり、 struct score 型になります。 s[0],s[1]といったものと同じです。 (より正確に言えば、struct score s[MAX]と宣言しているので、s[MAX]は範囲外となり、どんな動作をするかはわかりません) > minmax(struct score s[], int n, struct score *minscore, struct score *maxscore) とstruct scoreの配列を要求しているのですから、型が一致していません。 この場合、struct scoreの配列は 「s」 です。
お礼
ご回答ありがとうございます。 minmax(struct score s[], int n, struct score *minscore, struct score *maxscore) ↓ minmax(struct score s, int n, struct score *minscore, struct score *maxscore) ということですか? しかしこれでコンパイルすると、minmax関数内のs[0]やs[i]の'['に対して、「structに対して正しくありません」と出てしまいます…。
お礼
よく理解できました! 丁寧に教えてくださってありがとうございました。