删除getchar部分时,默认语句有效。
//第一个版本
int c;
while ((c = getchar()) != EOF){
switch(c){
case 'a': case 'A': printf("aaa"); break;
default: printf("invalid");
}
}
//第二版
int c;
while ((c = getchar()) != EOF){
switch(c){
case 'a': case 'A': printf("aaa"); break;
default: printf("invalid");
}
c = getchar();
}
在第一个版本中,默认部分与(情况a)一起工作,但是当我输入第二个版本时,情况并非如此。这是为什么 ?
当您反复使用getchar()获取输入时,需要清除输入缓冲区以扫描另一个输入。
在您发布的第一个版本中,case:'a'
正常执行,当程序到达while循环结束时,它需要清除输入缓冲区。因此它本身执行扫描操作(通过扫描空输入)并再次进入循环。
您可以在while循环结束时轻松清理缓冲区:
int c;
while ((c = getchar()) != EOF){
switch(c){
case 'a': case 'A': printf("aaa"); break;
default: printf("invalid");
}
getchar(); // Clear input buffer in order to scan next input.
}