A call to fflush(), fseek(), or rewind() discards the character.
You may not unget an EOF.
#include <stdio.h> int main () { FILE * fp; int c; char buffer [256]; fp = fopen ("test.txt","rt"); if (fp==NULL) perror ("Error opening file"); else { while (!feof (fp)) { c=getc (fp); if (c == '#') ungetc ('@',fp); else ungetc (c,fp); fgets (buffer,255,fp); fputs (buffer,stdout); } } return 0; }