• 締切済み

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'; }

みんなの回答

  • rot-N
  • ベストアンサー率27% (118/432)
回答No.6

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)
回答No.5

部分的な実現方法などは他の方も書かれているので、私は全体的な流れのサンプルを。 ご参考になれば... #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)
回答No.4

回答については、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)
回答No.3

こんにちは。 ソースコードの{}の位置が若干おかしいところがある気もしますが、コピーする時にずれたのでしょうか。それ以外で気がついた点をいくつか。 main関数以外で出力するのは下の方もいわれているように関数ia,ibの中にprintf文を記述すればよいことです。 また、上記のコードではmain関数の中に関数ia,ibの呼び出し文がないですので、呼び出し記述をしてください。 それから、「4.関数の戻り値はなし」とのことですので、関数がint型なのはおかしいと思います。 それと、「引数は2つ」という問題文からして、関数は一つで、そこに引数を2つ持たせればよい気もします。 参考になりましたら幸いです。

回答No.2

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)
回答No.1

単純に、mainの中にある、printfを関数ibに移せばいいです。 printfは、main以外の関数の中でも使えます。

関連するQ&A