- ベストアンサー
関数で算出した値を他の関数で使いたい
- 関数で算出した値を他の関数で使いたいという要望があります。
- 「平均点を出す関数」と「数学の点数のベスト3を出す関数」を使って、
- 「平均点」と「数学の点数のベスト3の名前とその点数と、各々の点数と平均点との差」を求めるプログラムを作成していますが、平均点を使うことができません。修正方法を教えてください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
★最初に全角文字が多数あるためエラーになりますよ。 ・全角の空白文字と『{』がありました。 ・それから『SUBJECT』は変数なのですか? どこにも定義されていませんが…。 ・『average』関数にある『avg[0]』は最初の一度だけしか初期化しませんよ。 2回目の呼び出しからは、前の平均に加算していきます。→正しく平均を出せません。 間違い⇒『static int avg[0] ={0};』 正しい⇒『int avg[1] ={0};』 『main()』関数も同じ宣言なので直しましょう。 ・『average』関数にある『4』は記号定数の『STUDENT』を使いましょう。 ・それから『i』を使わずに『sp』をインクリメントすれば良いと思います。 SEISEKI *end; for ( end = (sp + STUDENT) ; sp < end ; sp++ ){ avg[ 0 ] += sp->math; } 最後に: ・回答者 No.3 さん、ヒントの 『平均点を出す関数は、格納用のアドレスを受け取っている』は 特に問題ありませんよ。→構造体配列の名前は『アドレス』を渡すのと同じです。 分かりやすくは関数を『int average( SEISEKI sp[], int num, int *p )』とすべきでしょうね。 ・質問者さんへ。 まず、コンパイルできるようにソースを手直して下さい。 ・それから 間違い⇒『static int avg[0] ={0};』 正しい⇒『int avg[1] ={0};』 も直しましょう。→やたらに『static』は付けない方がいいです。意味が分かっていないようですね。 ・あと引数に『int *p』となっているので、『int avg[1];』の配列を渡すのではなくて『int avg;』を 『&avg』として関数の引数に渡します。 ・以上。おわり。→全面的にソースを見直して下さい。できれば一から作り直す方が混乱せず直せます。
その他の回答 (5)
- 1839cc
- ベストアンサー率54% (12/22)
NO3です。 NO5さん、問題があるとは言ってませんよ? そもそも、第一引数の話ではありません。 では、もう少しわかりやすくヒントを言い直してみますね。 『平均点を出す関数は、せっかく格納用のアドレスを受け取っているのに』。 ほとんど答えになってしまっていますが、これでいかがでしょうか(笑)
お礼
ご回答ありがとうございました。返事が遅くなりまして、大変申し訳ありませんでした。 どうもありがとうございます。問題は解決できました。
- tatsu99
- ベストアンサー率52% (391/751)
力わざになりますが、全ての関数から、同じ変数を参照できるようにすればよいです。、「平均点を出す関数」で求めた値を int main()の上の行に定義します。 ------------------- int 求めた値; int main() --------------- のようにすると求めた値は全ての関数から参照/更新できます。 もちろん、求めた値は、漢字でなく、int result;等のように定義します。
お礼
ご回答ありがとうございました。返事が遅くなりまして、大変申し訳ありませんでした。 字
- 1839cc
- ベストアンサー率54% (12/22)
これ、学校の課題かなにかじゃないですか? だとすると、あまり詳細な答えを書くべきではなさそうですね。 それよりも、まずコンパイルエラーと警告をゼロにしてください。 まさか、コンパイルは通っていませんよね? 通るのだとしたら、コンパイラを変えるところからはじめてください。 > 簡単な修正で直せる方法 ヒントは「平均点を出す関数は、格納用のアドレスを受け取っている」です。
お礼
ご回答ありがとうございました。返事が遅くなりまして、大変申し訳ありませんでした。 字数の関係で元のプログラムの余分な部分を削除していたら、おかしくなってしまったのかもしれません。どうもありがとうございました。
> 平均点とベスト3の名前とその点数は出せるのですが 本当ですか? 投稿されたコードをそのままコンパイルしてみたところ、 大量のエラーが発生してしまいました。
お礼
ご回答ありがとうございました。返事が遅くなりまして、大変申し訳ありませんでした。 字数の関係で元のプログラムの余分な部分を削除していたら、おかしくなってしまったのかもしれません。どうもありがとうございました。
ソースは見てないけど、ベスト3を表示するときに平均点を使うだけでしょ ベスト3表示が別関数なら それを呼んでる関数側で引数として平均点も一緒に渡せば良いのでは?
お礼
ご回答ありがとうございました。返事が遅くなりまして、大変申し訳ありませんでした。
お礼
ご回答ありがとうございました。返事が遅くなりまして、大変申し訳ありませんでした。 字数の関係で元のプログラムの余分な部分を削除していたら、おかしくなってしまったのかもしれません。 >やたらに『static』は付けない方がいいです。意味が分かっていないようですね。 まだ勉強中ですので、知らないことだらけです。どうもありがとうございました。