ungetc function pushes back the character c onto the
input stream stream. So the next input from stream will
read c before anything else.
If c is
ungetc does nothing and just returns
EOF. This lets you call
ungetc with the return value of
getc without needing to check for an error from
The character that you push back doesn't have to be the same as the last
character that was actually read from the stream. In fact, it isn't
necessary to actually read any characters from the stream before
unreading them with
ungetc! But that is a strange way to write
a program; usually
ungetc is used only to unread a character
that was just read from the same stream.
The GNU C library only supports one character of pushback—in other
words, it does not work to call
ungetc twice without doing input
in between. Other systems might let you push back multiple characters;
then reading from the stream retrieves the characters in the reverse
order that they were pushed.
Pushing back characters doesn't alter the file; only the internal
buffering for the stream is affected. If a file positioning function
rewind; see File Positioning) is called, any pending pushed-back characters are
Unreading a character on a stream that is at end of file clears the
end-of-file indicator for the stream, because it makes the character of
input available. After you read that character, trying to read again
will encounter end of file.