連続して一文字を入力。数字以外を入力するとエラーメッセージを表示し、次の入力に移行する。Eを入力すると終了。それまで出てきた数字らのSumとAverageを出力。
for文でscanfで連続入力するシステムです。if文でEとそれ以外の文字、次のifで数字かそれ以外と分けました。elseに"Illegal input:"を表示するところがあるのですが、入力し判別されたあとに、常に"Illegal input:が表示されてしまいます。引数の状態を調べたところ、判別されたあとに空の引数になって、もう一度if文に入っていました。調べてもどうしてなのかわかりません。
現状の表示*Linaxのgccで実行。引数aの状態をprintfで表示している。
5 a=5 a= Illegal input: t a=t Illegal input:t a= Illegal input: 3 a=3 a= Illegal input: E a=E Sum is:8.000000 Average is:4.000000
該当のソースコード
C
1#include <stdio.h> 2#include <stdlib.h> 3 4int average = 0; 5float count = 0; 6 7void judge(char x) 8{ 9 if(x!='E'){ 10 if(x=='1'){ 11 average += 1; 12 count += 1; 13 }else if(x=='2'){ 14 average += 2; 15 count += 1; 16 . 17 . 18 . 19 }else if(x=='9'){ 20 average += 9; 21 count += 1; 22 }else{ 23 printf("Illegal input:%c\n", x); 24 } 25 } 26} 27 28int main() 29{ 30 char a; 31 int i; 32 for (i=0;a!='E';i++){ 33 scanf("%c", &a); 34 printf("a=%c\n", a); 35 judge(a); 36 } 37 printf("Sum is:%d\n", average); 38 printf("Average is:%f\n",average/count); 39 return 0; 40}
試したこと
int main(void)にしてみた → 変わらず
scanf(%*c%c)にしてみた → 変わらず
if(a!='E' && a!=' ')にしてみた → 変わらず
judge()にreturn → 変わらず
回答4件
あなたの回答
tips
プレビュー