¿Por qué necesito varios caracteres EOF (CTRL + Z)?

Como un poco de experiencia, soy bastante nuevo en el lenguaje de programación C y, como tal, he estado intentando realizar algunos de los ejercicios en la segunda edición del manual de Kernighan & Ritchie. Me doy cuenta de que probablemente podría tratar ciertos problemas de manera más sucinta utilizando más la biblioteca estándar, pero estoy tratando de mantener mi repertorio de comandos útiles sincronizados con el libro tanto como sea posible.

Si hace la diferencia, estoy compilando mi fuente en un entorno Windows XP usando el Compilador Tiny C (TCC) y estoy ejecutando los archivos binarios dentro de la Consola XP (cmd.exe).

Problem: manejo deEnd-of-File (EOF) characters. He preparado un pequeño caso de prueba para ilustrar el problema. El programa parece manejar el carácter EOF (parcialmente). Intentaré demostrar el problema con entradas / salidas de muestra.

#include <stdio.h>

int main() 
{
    int character, count;

    character = 0;
    character = getchar();

    for (count = 0; character != EOF; ++count) 
    {
        character = getchar();
    }

    printf("Count: %d", count);
    return 0;
}

Entrada de muestra 1:abcd^Z[enter] (donde ^ Z / CTRL + Z representa el carácter EOF y [enter] representa la tecla Enter).

Salida de muestra 1:Count: 4 (espera más entradas o finaliza correctamente en ^ C / ^ Z [enter])

Entrada de muestra 2:abcd^Zefgh

Salida de muestra 2:Count: 4 (espera más entradas o finaliza correctamente en ^ C / ^ Z [enter])

Como se señaló en ambos ejemplos, el recuento de caracteres no se emite hasta que se inicia una secuencia ^ C / ^ Z [enter]. Hasta que se inicia, el programa espera (y de hecho procesa) más información. Sin embargo, como se señaló en el ejemplo 2, cuando el programa encuentra el ^ Z inicial, deja de procesar esa línea de entrada, espera más entradas o devuelve el conteo correcto si se inicia una secuencia ^ C / ^ Z [enter].

No puedo entender por qué el programa solo maneja parcialmente el carácter EOF. Me parece que si está truncando el final de la muestra 2, también debería estar saliendo del ciclo por completo. ¿Alguna idea de por qué al reconocer un personaje EOF el programa no imprime inmediatamente el conteo actual y sale?

Respuestas a la pregunta(5)

Su respuesta a la pregunta