Hey liebe Community! 
Also ich habe folgendes Problem: Im Buch "C von A bis Z" gibt es im Kapitel 16 ein Programm mit der neuen Funktion ungetc(). Ich verstehe schon, dass die Funktion das EOF-Flag löscht und das zuletzt gelesene Zeichen zurückgibt. Nur warum funktioniert dann das folgende Programm so, dass aus einer Datei eingelesen wird, und wenn die Datei zu Ende ist wartet das Programm, bis man etwas neues in die Datei schreibt bzw. dazuschreibt. Kann mir das bitte jemand erklären?

Also ich habe folgendes Problem: Im Buch "C von A bis Z" gibt es im Kapitel 16 ein Programm mit der neuen Funktion ungetc(). Ich verstehe schon, dass die Funktion das EOF-Flag löscht und das zuletzt gelesene Zeichen zurückgibt. Nur warum funktioniert dann das folgende Programm so, dass aus einer Datei eingelesen wird, und wenn die Datei zu Ende ist wartet das Programm, bis man etwas neues in die Datei schreibt bzw. dazuschreibt. Kann mir das bitte jemand erklären?

Code:
#include <stdio.h>
#include <stdlib.h>
/* bitte anpassen */
#define DATEI "datei.txt"
int main(void) {
FILE *fp;
int c;
fp = fopen(DATEI, "r");
if(fp == NULL) {
fprintf(stderr, "Konnte %s nicht öffnen\n", DATEI);
return EXIT_SUCCESS;
}
while(1) {
while( (c=fgetc(fp)) ) { /* zeichenweise einlesen */
if(c == EOF) /* Ist es EOF. */
ungetc(c,fp); /* letztes Zeichen zurück */
else
fputc(c, stdout); /* ausgeben */
}
}
/* Wird nie erreicht. */
fclose(fp);
return EXIT_SUCCESS;
}