Chapter Contents |
Previous |
Next |
ungetc |
Portability: | ISO/ANSI C conforming, UNIX compatible |
SYNOPSIS | |
DESCRIPTION | |
RETURN VALUE | |
PORTABILITY | |
EXAMPLE | |
RELATED FUNCTIONS | |
SEE ALSO |
SYNOPSIS |
#include <stdio.h> int ungetc(int c, FILE *f);
DESCRIPTION |
Use
ungetc
to undo the effect of
getc
. The
ungetc
function backs up the file input pointer
so that the next call to an input routine returns
c
. The call
ungetc(EOF, f)
is valid
but has no effect.
For a binary file, a successful call to
ungetc
moves the file position back to the previous character, unless
the file is positioned at the beginning.
RETURN VALUE |
ungetc
returns
c
if its operation was successful
or
EOF
if
c
cannot be pushed back. You may not be able to push back more than
a single character, depending on the file contents and attributes.
PORTABILITY |
Portable use of
ungetc
is limited to one character. Using
ungetc
to push back multiple characters without an intervening
read
is not
portable.
EXAMPLE |
This example reads a line from the terminal
and separates it into words using
ungetc
.
Note that this operation could be done more easily using
scanf
:
#include <stdio.h> #include <ctype.h> int wordcnt = 0; static int skipspace(void); static int printword(void); main() { char line[80]; puts("Enter a short line of text:"); for(;;) { if (skipspace() == 0) break; /* Skip white space; stop at end of line. */ if (printword() == 0) /* Print the next word. */ break; } if (wordcnt == 0) puts("There were no words in that line.\n"); exit(0); } static int skipspace(void) { /* Read white space characters from standard input. Use */ /* ungetc() to put back any nonwhite space character */ /* found. If a new line is read, stop reading and return 0. */ int ch; for (;;) { ch = getchar(); if (ch == EOF || ch == '\n') return 0; if (!isspace(ch)) break; } /* Put back nonspace for printword to read. */ ungetc(ch, stdin); return 1; } static int printword(void) { int ch; if (wordcnt == 0) puts("Words found in input:"); ++wordcnt; for(;;) { ch = getchar(); if (ch == EOF || ch == '\n') return 0; if (!isspace(ch)) putchar(ch); else return 1; } }
RELATED FUNCTIONS |
SEE ALSO |
Chapter Contents |
Previous |
Next |
Top of Page |
Copyright © 2001 by SAS Institute Inc., Cary, NC, USA. All rights reserved.