The ungetc() function takes a single character and shoves it back onto an input stream. It is the opposite of the getc() function, which reads a single character from an input stream. Also, ungetc() is an input function, not an output function.
Syntax:
int ungetc(int char, FILE *stream)
Parameters:
- char: specifies the int promotion of the character to be put back. The value is internally converted to an unsigned char when put back.
- stream: specifies the pointer to a FILE object that identifies an input stream.
Return Value: The function returns two kind of values.
- On success, the ungetc() function returns the character ch.
- On failure, EOF is returned without changing the stream.
Important points about the function:
- The ungetc() function pushes the byte specified by char (converted to an unsigned char) back onto the input stream pointed to by stream.
- The pushed-back bytes is returned by subsequent reads on that stream in the reverse order of their pushing.
- A successful intervening call (with the stream pointed to by stream) to a file-positioning function ( fseek(), fsetpos(), or rewind()) discards any pushed-back bytes for the stream.
- The external storage corresponding to the stream shall be unchanged.
- A successful call to ungetc() clears the end-of-file indicator for the stream.
- The value of the file-position indicator for the stream after reading or discarding all pushed-back bytes shall be the same as it was before the bytes were pushed back.
- The file-position indicator is decremented by each successful call to ungetc(), if its value was 0 before a call, its value is unspecified after the call.
Below programs illustrate the above function.
Program 1:
#include <stdio.h>
int main()
{
FILE * f;
int char ;
char buffer[256];
f = fopen ( "use1.txt" , "r" );
if (f == NULL) {
printf ( "Error in opening file" );
return (-1);
}
while (! feof (f)) {
char = getc (f);
if ( char == '!' ) {
ungetc ( '+' , f);
}
else {
ungetc (c, f);
}
fgets (buffer, 255, f);
fputs (buffer, stdout);
}
return 0;
}
|
Let us assume, we have a text file use1.txt, which contains the following data. This file will be used as an input for our example program, then the input and output are shown below:
Input: !c standard library
!library function stdio.h-ungetc()
Output: +c standard library
+library function stdio.h-ungetc()
Program 2:
#include <stdio.h>
int main()
{
int ch;
while ((ch = getchar ()) != '1' )
putchar (ch);
ungetc (ch, stdin);
ch = getchar ();
putchar (ch);
return 0;
}
|
Last Updated :
25 Oct, 2018
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...