I am stumped by the 1.5.2 question in K&R. I googled for sometime and found out that i have to supply the EOF input after entering the characters.
long nc = 0;
while (getchar() != EOF)
++nc;
printf("%ld\n", nc);
return 0;
I tried both commnad-D and control-D as EOF inputs but nothing worked. Any Idea how to supply the EOF for mac osx?
If you want to see what EOF is set as in your terminal, you can type
on my mac, this gives the output -
You can see four lines up from the bottom, three cells in eof is ^D.
There's a fuller description here which is where I found the information.
I just figured it out. You have to press Ctrl+D+D. Hold the control down and press D twice. I have to say what a weird key sequence.
By default, OS X (formerly Mac OS X) terminals recognize
EOF
when Ctrl-D is pressed at the beginning of a line.In detail, the actual operation is that, when Ctrl-D is pressed, all bytes in the terminal’s input buffer are sent to the running process using the terminal. At the start of a line, no bytes are in the buffer, so the process is told there are zero bytes available, and this acts as an
EOF
indicator.This procedure doubles as a method of delivering input to the process before the end of a line: The user may type some characters and press Ctrl-D, and the characters will be sent to the process immediately, without the usual wait for enter/return to be pressed. After this “send all buffered bytes immediately” operation is performed, no bytes are left in the buffer. So, when Ctrl-D is pressed a second time, it is the same as the beginning of a line (no bytes are sent, and the process is given zero bytes), and it acts like an
EOF
.You can learn more about terminal behavior by using the command “man 4 tty” in Terminal. The default line discipline is termios. You can learn more about the termios line discipline by using the command
man termios
.