This example reads in wide characters from stream, and then calls ungetwc to push the characters back to the stream.
#include <wchar.h> #include <wctype.h> #include <stdio.h> #include <stdlib.h>
int main(void)
{
FILE *stream;
wint_t wc;
wint_t wc2;
unsigned int result = 0;
if (NULL == (stream = fopen("ungetwc.dat", "r+"))) {
printf("Unable to open file.\n");
exit(EXIT_FAILURE);
}
while (WEOF != (wc = fgetwc(stream)) && iswdigit(wc))
result = result * 10 + wc - L'0';
if (WEOF != wc)
ungetwc(wc, stream); /* Push the nondigit wide character back */
/* get the pushed back character */
if (WEOF != (wc2 = fgetwc(stream))) {
if (wc != wc2) {
printf("Subsequent fgetwc does not get the pushed back character.\n");
exit(EXIT_FAILURE);
}
printf("The digits read are '%i'\n"
"The character being pushed back is '%lc'", result, wc2);
}
return 0;
/****************************************************************************
Assuming the file ungetwc.dat contains:
12345ABCDE67890XYZ
The output should be similar to :
The digits read are '12345'
The character being pushed back is 'A'
****************************************************************************/
}