- 締切済み
main関数以外での結果の表示?
C言語で関数を用いたプログラムを作成しています。内容はA君、B君のボーリングの成績を入力し、その点数をランク付けするというものです。(250以上はS、200以上はA、150以上はB、100以上はC、50以上はD、50未満はFになります。) それから、このプログラムの条件は 1、main関数は値の入力と関数を呼び出すだけ。 2、関数の引数は入力した2つの値。 3、関数の中で結果を表示。 4、関数の戻り値はなし。 というもので、3番の結果のmain関数以外での結果の表示の仕方がわからず、どうやって結果を表示させていくのかよくわからず、行き詰っています。そのあたりの解説をしていただくとありがたいです。 なお、私が途中まで書いたので、問題点の指摘をおねがいいたします。 #include<stdio.h> int ia(int x); int ib(int y); int main(){ int a,b; printf("A君のスコア"); scanf("%d",&a); printf("B君のスコア"); scanf("%d",&b); } int ia(int x); char ix; if(x>=250){ ix = 'S'; }else if(x>=200 && x<250){ ix = 'A'; }else if(x>=150 && x<200){ ix = 'B'; }else if(x>=100 && x<150){ ix = 'C'; }else if(x>=50 && x<100){ ix = 'D'; else{ ix='F'; } int ib(int y); char iy; if(y>=250){ iy = 'S'; }else if(y>=200 && y<250){ iy = 'A'; }else if(y>=150 && y<200){ ix = 'B'; }else if(y>=100 && y<150){ iy = 'C'; }else if(y>=50 && y<100){ iy = 'D'; }else{ iy ='F'; }
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- rot-N
- ベストアンサー率27% (118/432)
No4です。 おっと、関数の引数は、Aクン、Bクンの得点の2つだ(^^;)。 出力関数 void syutu(Aクンの得点,Bクンの得点) { printf(書式省略,hantei(Aクンの得点)); printf( ,hantei(Bクンの得点)); } main()では、scanfでAクンの得点、Bクンの得点を入力して、syutu()関数を呼び出せば良いかな(^o^)。 #「課題そのものが悪い」なんて、回答に書かないでね(^.-)☆
- sabo_chu
- ベストアンサー率25% (5/20)
部分的な実現方法などは他の方も書かれているので、私は全体的な流れのサンプルを。 ご参考になれば... #include<stdio.h> // 結果表示 void dispResult(int ia, int ib); // ランク付け char ranking(int iscore); /* メイン関数 */ void main() { int ia; // A君のスコア int ib; // B君のスコア // A君のスコア取得 // B君のスコア取得 // 結果表示 dispResult(ia, ib); } /* 結果を表示する */ void dispResult(int ia, int ib) { char ca; // A君のランク char cb; // B君のランク // A君のランクを取得 ca = ranking(ia); // B君のランクを取得 cb = ranking(ib); // A君のランクを表示 // B君のランクを表示 } /* ランク付けをする */ char ranking(int iscore) { char crank; // ランク // スコアからランクを決定する return (crank); } こんな感じでいかがでしょうか? 不具合があったらごめんなさい。 あくまでも参考程度に...
- rot-N
- ベストアンサー率27% (118/432)
回答については、No1殿の言うとおり、printf(これも関数だって判るかな?)の中に移せばよい。 つまり得点判定の関数の中にprintf()やputc()、putchar()を書いて、SとかAとかを出力させればよい。 で、さて、貴兄のプログラムを見ていると、「関数」というものが全然判ってない様ですね。なぜ、Aクンの判定と、Bクンの判定、それぞれにia()とib()を作っているのかな? (しかもBクンのB判定のところは、変数ixを使っている(^^;)) 私だったら、たとえば、hanteiという関数を作って、 hantei(Aクンの得点); hantei(Bクンの得点); と、関数の引数にAクン、Bクンの得点を入れてhantei関数を呼び出すのだけどね。 課題にも文句(^^;)があって、こういう場合、関数hantei()の戻り値が、Sとか、Aとかになるのが、綺麗なヤリ方だと思うね(実は、ここは趣味とか個人毎の書き方とかいう以前の問題なのだが)。 つまり、判定の関数のプロトタイプは、「char hantei(int 得点);」というところかな。 そうすると、 printf("Aクンの判定:%c\n",hantei(Aクンの得点)); って書けるよね? プログラムの勘所って、そういうもんじゃないかと思うのだが。
- YAtsubaki
- ベストアンサー率50% (7/14)
こんにちは。 ソースコードの{}の位置が若干おかしいところがある気もしますが、コピーする時にずれたのでしょうか。それ以外で気がついた点をいくつか。 main関数以外で出力するのは下の方もいわれているように関数ia,ibの中にprintf文を記述すればよいことです。 また、上記のコードではmain関数の中に関数ia,ibの呼び出し文がないですので、呼び出し記述をしてください。 それから、「4.関数の戻り値はなし」とのことですので、関数がint型なのはおかしいと思います。 それと、「引数は2つ」という問題文からして、関数は一つで、そこに引数を2つ持たせればよい気もします。 参考になりましたら幸いです。
- Somali_Shinji
- ベストアンサー率14% (45/305)
ia 関数とib関数分ける必要ないよね。一つの関数で間に合うはず。 それとif文の書きかただけど: iy = 'S'; if (y<50) iy = 'F' else if (y < 100) iy = 'D'; ... else if (y < 250) iy = 'A'; って書き方でいいでしょ? で、最後に: printf("ランク = %c\n", iy);
- rabbit_cat
- ベストアンサー率40% (829/2062)
単純に、mainの中にある、printfを関数ibに移せばいいです。 printfは、main以外の関数の中でも使えます。