为什么默认语句在案例之后起作用,当我删除 c = getchar() 部分时?
Why does the default statement works after cases, when i remove c = getchar() part?
当我删除 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 时,默认部分与(情况 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.
}
当我删除 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 时,默认部分与(情况 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.
}