为什么默认语句在case之后,当我删除c = getchar()部分时有效?

问题描述 投票:0回答:1

删除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)一起工作,但是当我输入第二个版本时,情况并非如此。这是为什么 ?

c while-loop switch-statement default
1个回答
0
投票

当您反复使用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.
}
© www.soinside.com 2019 - 2024. All rights reserved.