Терминал иногда может быть немного запутанным. Вы должны изменить свою программу на:
#include <stdio.h>
int main() {
int read;
while ((read = getchar()) != EOF) {
putchar(read);
}
return 0;
}
Это будет читать до тех пор, пока getchar не прочитает EOF (большую часть времени этот макрос расширяется до -1) из терминала. getchar возвращает int, поэтому вы должны превратить вашу переменную «read» в целое число, чтобы вы могли проверить EOF. Вы можете отправить EOF из вашего терминала в Linux с помощью ^ D, и я думаю, что в Windows с ^ Z (?).
Чтобы немного объяснить, что происходит. В вашей программе выражение
(read = getchar()) !='\n'
будет истинным, если из буфера не читается '\ n'. Проблема в том, чтобы получить буфер для вашей программы, вы должны нажать Enter, что соответствует '\ n'.
Следующие шаги выполняются, когда ваша программа вызывается в терминале:
~$\a.out
это запускает вашу программу
(empty line)
getchar () совершил системный вызов для получения ввода от терминала, и терминал принимает
f
вы сделали ввод в терминале. 'F' записывается в буфер и возвращается обратно на терминал, ваша программа еще не имеет представления о символе.
f
f~$
Вы нажали ввод. Ваш буфер содержит теперь 'f \ n'. «Enter» также сигнализирует терминалу, что он должен вернуться в вашу программу. Ваша прога
читает буфер и находит f и выводит его на экран, а затем находит '\ n' и немедленно останавливает цикл и завершает вашу программу.
Это будет стандартное поведение большинства терминалов. Вы можете изменить это поведение, но это будет зависеть от вашей ОС.