La questione è che l'eof viene rilevato solo DOPO la lettura di un dato. Modifica il codice di conseguenza.