int ungetc(int c, FILE *fp)
pushes the character c back into fp, and returns either c, or EOF
for an error.
where as int putc(int c, FILE *fp)
writes the ch开发者_如何学编程aracter c into the file fp and returns the character written, or EOF
for an error.
//These are the statements from K&R. I find myself confused, because putc()
can be used after getc
and can work as ungetc
. So whats the use in specifically defining ungetc()
.
putc
writes something to output, so it appears on the screen or in the file to which you've redirected output.
ungetc
put something back into the input buffer, so the next time you call getc
(or fgetc
, etc.) that's what you'll get.
You normally use putc
to write output. You normally use ungetc
when you're reading input, and the only way you know you've reached the end of something is when you read a character that can't be part of the current "something". E.g., you're reading and converting an integer, you continue until you read something other than a digit -- then you ungetc
that non-digit character to be processed as the next something coming from the stream.
ungetc works with streams opened for read and doesn't modify the original file. putc works on streams opened for write and actually writes the byte to the file.
If you do ungetc
on a stream fp
, and then you do a getc
again, you get back the same character you just put in. If you do putc
the "stream moves on", and a subsequent getc
will get whatever is after it, if there is anything...
The getc
and ungetc
are used to "peek ahead" and put it back if there is some special case in handling characters e.g.
精彩评论