Ciao a tutti!!

Ho la necessità di leggere EOF da stdin, però non riesco a capire una cosa, faccio un esempio per spiegarmi meglio.

codice:
#include <stdio.h>

int main()
{
    int i;
    char c;

    while(c!=EOF){
        c=fscanf(stdin, "%c", &c);
    }


    return 0;
}
Non riesco a capire perché se con questo codice scrivo ciaoCTRL+z non si blocca immediatamente ma per bloccarsi mi "costringe" ad inserire nuovamente CTRL+z, mentre se prima di premere CTRL+z premo invio si blocca subito?

Spero di essermi spiegato bene, e grazie a tutti anticipatamente...