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