ctrl-d didn't stop the while(getchar()!=EOF) loop [duplicate]
Solution 1:
EOF is not a character. The EOF
is a macro that getchar()
returns when it reaches the end of input or encounters some kind of error. The ^D
is not "an EOF character". What's happening under linux when you hit ^D on a line by itself is that it closes the stream, and the getchar()
call reaches the end of input and returns the EOF
macro. If you type ^D
somewhere in the middle of a line, the stream isn't closed, so getchar()
returns values that it read and your loop doesn't exit.
See the stdio section of the C faq for a better description.
Additionally:
On modern systems, it does not reflect any actual end-of-file character stored in a file; it is a signal that no more characters are available.
Solution 2:
In addition to Jon Lin's answer about EOF, I am not sure the code you wrote is what you intended. If you want to see the value returned from getchar
in the variable d
, you need to change your while
statement to:
while((d=getchar())!=EOF) {
This is because the inequality operator has higher precedence than assignment. So, in your code, d
would always be either 0
or 1
.