

C言語を習い始めてまだ一ヶ月ほどの者です。  
以下のコードは一桁の自然数が入力されればその値を加算してそれ以外の文字は認めない、Eが押されたときfor文を終わらせて合計と平均を出力するプログラムです。課題に沿っているので大幅な変更はできません。

質問です。  
このコードを実行すると一桁の自然数を入力しても "Illegal Input" が出力されてしまいます。  
`else if` と `else` が同時に実行されてしまう理由が分かりません。ご教授お願いいたします。

[code]

    #include <stdio.h>
    
    int main(){
      char c;
      int sum=0, count;
      for(count=0;count>=0;){
        scanf("%c", &c);
        if(c=='E'){
          printf("Sum is:%d\n", sum);
          printf("Average is:%f\n", (float)sum/count);
          break;
        }else if(c>'0' && c<='9'){
          sum+=(int)c-48;
          count+=1;
        }else{
          printf("Illegal input:%c\n", c);
        }
      }
      return 0;
    }
    
[/code]


CC BY-SA 4.0
2019-10-21T04:34:24.850
59834
2020-01-20T08:25:28.137
2020-01-20T08:25:28.137
3060
35091
question
c
C言語のif文について指摘お願いします


改行コードが原因のようです。`else`句を以下のように修正すれば良いと思います。

[code]

    }else{
        if (c=='\n') { continue; }
        printf("Illigal input:%c\n", c);
    }
    
[/code]

私的な感想ですがこの場合は`for`ループではなく`while`ループのほうがいいかなと思いました。どこからが大幅な変更になるのかが分からないので以下は参考までに。

[code]

    #include <stdio.h>
    #include <string.h>
    
    int main (const int argc, const char* argv[]) {
        char str[2] = "";
        int sum=0;
        int count = 0;
        while (NULL != fgets(str, sizeof(str), stdin)) {
            const char c = str[0];
    
            if(c == 'E'){
                printf("Sum is:%d\n", sum);
                printf("Average is:%f\n", (float)sum/count);
                break;
            }else if('0' < c && '10' > c){
                sum += (int)c-48;
                count += 1;
            } else {
                if ( c == '\n') { continue; }
                printf("Illigal input:%c\n", c);
            }
        }
    
        return 0;
    }
    
[/code]


CC BY-SA 4.0
2019-10-21T05:52:15.827
59838
2019-10-21T05:52:15.827
25936
59834
answer