При вставке символа в командной строке вы действительно вставляете два символа, это сам символ и символ новой строки (\n
), поэтому первый getchar()
получает символ, а второй getchar()
получает символ новой строки, поэтому он переходит на третий getchar()
.
Если вы нажмете только ввод, вы увидите, что он циклически повторяется только один раз, так как ввод - только один символ новой строки, вы можете решить эту проблему, поставив два getchar (), так что второй перехватывает \n
:
while(input != '!'){
puts("Enter a char");
input = getchar();
getchar();
///...
Или создайте регистр при переключении на символ новой строки.
case '\n': break;