Вы только получите EOF
из потока, когда конец файла достигнут, не конец строки. Как вы сигнализируете, что конец файла зависит от настроек вашей ОС и терминала.
Это обычно CTRLd на системах UNIX типа и CTRLг на Windows. Для UNIX в готовом режиме (обычный режим ввода) вам обычно нужно вводить его в качестве первого символа строки и следовать за ним с помощью новой строки (ENTER).
В Windows, то CTRLг можно вводить в любом месте на линии, но все-таки нужно следовать новой строки.
В UNIX, действительный символ, чтобы сообщить интерфейс терминала, который вы хотите отправить EOF
, может быть задан командой stty
. Если выполнить stty -a
, вы увидите что-то вроде:
speed 38400 baud; rows 45; columns 150; line = 0;
intr = ^C; quit = ^\; erase = ^H; kill = ^U; eof = ^D;
eol = <undef>; eol2 = <undef>; swtch = ^Z; start = ^Q;
stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V;
flush = ^O; min = 1; time = 0; -parenb -parodd cs8 -hupcl
-cstopb cread -clocal -crtscts -ignbrk brkint -ignpar -parmrk
-inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany
-imaxbel opost -olcuc -ocrnl onlcr -onocr -onlret -ofill
-ofdel nl0 cr0 tab0 bs0 vt0 ff0 isig icanon iexten echo
-echoe -echok -echonl -noflsh -tostop -echoctl -echoke
Вы можете увидеть в конце второй строки, eof
устанавливается в ^D
(CTRLд). Вы можете изменить это с помощью:
stty eof ^x
установить его CTRLх, например. Вы также можете установить огромное количество других вещей, большинство из которых сделают ваш текущий терминал непригодным для использования, поэтому будьте осторожны :-)
Нижняя строка, если вы хотите сообщить программе, что файл закончен, используйте CTRLd для UNIX (или проверить stty
, если это не работает) или CTRLг для Windows. Если вы хотите просто получить линию ввода, используйте \n
символ в коде следующим образом:
#include <stdio.h>
int main (void) {
long nc = 0;
while(getchar() != '\n')
++nc;
printf("%ld\n", nc);
return 0;
}
Я действительно использую Windows и Ctrl + Z является правильным. Спасибо, я никогда не новичок. –
it ** is ** ctrl + z –