Почему оператор по умолчанию работает после случаев, когда я удаляю часть c = getchar ()? - PullRequest
0 голосов
/ 31 марта 2019

Оператор по умолчанию работает, когда я удаляю часть 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();
 }

В первой версии по умолчанию частьработает вместе с (случай а), когда я ввел, однако на второй версии это не так.Почему это так?

1 Ответ

0 голосов
/ 31 марта 2019

Когда вы получаете вход с помощью 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.
}
...