为什么默认语句在案例之后起作用,当我删除 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.
}