点数と単位を入力してControl+DでGPAを算出するプログラムを作っているのですが、EOFで抜け出す時にどこにif(tensu==EOF)break;やif((tensu==EOF) || (tani==EOF))break;を書いても一番最後に入力した点数と単位の無限ループになってしまいます。
評定と単位数を入力してください:100 2
100 点の評定は A で、Grade Point (GP) は 4 です。 (2単位)
評定と単位数を入力してください:88 1
88 点の評定は A で、Grade Point (GP) は 4 です。 (1単位)
評定と単位数を入力してください:
ここでControl+Dを入力すると
評定と単位数を入力してください:88 点の評定は A で、Grade Point (GP) は 4 です。 (1単位)
が無限に表示されてしまいます。
何がダメか教えていただきたいです。以前は配列の無限ループを質問させていただいたのですが、その時とは違うので解決策が見つかりませんでした。
c
1#include<stdio.h> 2 3char grade_char(int);//点数を渡して評定を返す 4int char_point(char);//評定を渡してGPAを返す 5 6int main(){ 7 int tensu,tani,tanisu,gp,cnt; 8 double gpa; 9 char hyotei; 10 while(1){ 11 printf("評定と単位数を入力してください:"); 12 scanf("%d %d",&tensu,&tani); 13 if(tensu==EOF)break; 14 hyotei=grade_char(tensu); 15 gp=char_point(hyotei); 16 printf("%d 点の評定は %c で、Grade Point (GP) は %d です。 (%d単位)\n",tensu,hyotei,gp,tani); 17 18 gp+=gp; 19 tanisu+=tani; 20 cnt++; 21 } 22 gpa=(double)(gp*tanisu)/cnt; 23 printf("Grade Point Average(GPA):%f, 単位数:%d\n",gpa,tanisu); 24 return 0; 25} 26 27char grade_char(int score){ 28if(0<=score && score<=34){ 29 return 'F'; 30} 31else if(35<=score && score<=49){ 32 return 'D'; 33} 34else if(50<=score && score<=64){ 35 return 'C'; 36} 37else if(65<=score && score<=79){ 38 return 'B'; 39} 40else { 41 return 'A'; 42} 43} 44 45int char_point(char point){ 46 if(point=='F'){ 47 return 0; 48 } 49 else if(point=='D'){ 50 return 0; 51 } 52 else if(point=='C'){ 53 return 2; 54 } 55 else if(point=='B'){ 56 return 3; 57 } 58 else { 59 return 4; 60 } 61} 62 63
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/08 08:17