#include<stdio.h>
int main(){
int grade;
int aCount = 0;
int bCount = 0;
int cCount = 0;
int dCount = 0;
int fCount = 0;
printf("Enter grades\n");
printf("Enter the EOF to end input\n");
while ((grade = getchar()) != EOF ){
switch (grade){
case 'A':
case 'a':
++aCount;
break;
case 'B':
case 'b':
++bCount;
break;
case 'C':
case 'c':
++cCount;
break;
case 'D':
case 'd':
++dCount;
break;
case 'F':
case 'f':
++fCount;
break;
default:
printf("Invalid\n");
printf("Enter a new grade\n");
break;
}
}
printf("\nTotals for each letter are:\n");
printf("A: %d\n", aCount);
printf("B: %d\n", bCount);
printf("C: %d\n", cCount);
printf("D: %d\n", dCount);
printf("F: %d\n", fCount);
return 0;
}
这是一个例子程序在一本书中,我目前阅读计数字母成绩。因此,有了这个程序,我希望它,我可以输入所有的成绩在一行,并结束与EOF(Ctrl+Z),然后输入(例如:acffbcd)。然而,结果是switch occurred中的默认情况。(https://i.stack.imgur.com/zCR9b.png)
我知道while循环会一直执行到getchar到达EOF,因此它永远不会读取换行符,所以默认情况不应该发生。我在while循环中将conditon改为(https://i.stack.imgur.com/Hg9ig.png),输入1来结束输入,而不是EOF,它可以按照我的要求完美地工作。
那么到底是什么问题呢?我将非常感谢你的帮助。
2条答案
按热度按时间2w2cym1i1#
更改此:
忽略空白字符。不只是'\n'。空白字符包括空格、制表符、反向制表符、回车符、行尾和换页字符。
简单地说:
如果isspace函数不能立即使用,可以通过在代码文件的顶部放置
#include <ctype.h>
来将其添加到程序中。nue99wik2#
这个是正确的。