Когда вы нажимаете ^Z
, программа замечает, что входной поток был закрыт, но вы продолжаете использовать getchar()
, поэтому вы получаете EOF
.Это зацикливается бесконечно, поскольку вы больше не можете вводить 'h'
.Обратите внимание, что только 'h'
(не 'A'
, не ^M
, а также не ^Z
) может остановить программу, поскольку Вы зацикливаетесь, если не получаете 'h' .
Другими словами, если вы хотите остановить, если введено что-то еще, кроме 'h'
, тогда выполните
do
{
ch = getchar();
putchar(ch);
} while (ch == 'h');