![]() 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.