contar el número de líneas, palabras y caracteres dentro de una entrada

En este momento estoy revisando un libro en C y he encontrado un ejemplo en el libro que no puedo trabajar.

#include  #define IN 1 #define OUT 0 main() { int c, nl, nw, nc, state; state = OUT; nl = nw = nc = 0; while ((c = getchar()) != EOF) { ++nc; if (c == '\n') ++nl; if (c == ' ' || c == '\n' || c == '\t') state = OUT; else if (state == OUT) { state = IN; ++nw; } } printf("%d %d %d\n", nl, nw, nc); } 

Se supone que cuenta el número de líneas, palabras y caracteres dentro de una entrada. Sin embargo, cuando lo ejecuto en el terminal parece que no hace nada. ¿Me estoy perdiendo algo o hay algún problema con este código?

El progtwig solo finaliza cuando finaliza la entrada (getchar devuelve EOF). Cuando se ejecuta en el terminal, esto normalmente nunca sucede y debido a esto, parece que el progtwig está atascado. Debe cerrar la entrada manualmente presionando Ctrl + D (posiblemente dos veces) en Linux o presionando F6 y Enter al comienzo de la línea en Windows (diferentes sistemas pueden usar diferentes medios para esto).

Está esperando la entrada en la entrada estándar. myprog < test.txt un archivo a él ( myprog < test.txt ) o escriba los datos y myprog < test.txt Ctrl-D (* nix) o Ctrl-Z (Windows).

Cuando lo ejecute, debe escribir su texto, presionar return , luego Ctrl-d y return (nada más en la línea) para indicar el final del archivo. Parece funcionar bien con mi simple prueba.

Lo que está haciendo es entrar en un bucle para la entrada. Si ingresa un carácter o nueva línea, no ocurre nada en la pantalla. Debe interrumpir el proceso (en mi Mac, esto es CTRL + D) que sirve como EOF. Entonces, obtendrá el resultado.

getchar () devuelve la entrada de la entrada estándar. Comience a escribir el texto para el que desea tener el recuento de palabras y el recuento de líneas. Su entrada termina cuando se alcanza el EOF, lo que usted hace presionando CTRL D.

CTRL D en este caso actúa como un carácter de fin de transmisión.

aclamaciones

Generalmente manejo este tipo de entrada como esta (para Linux): 1. haga un archivo (por ejemplo, llamado “input.txt”), escriba su entrada y guarde 2. use una tubería para enviar el texto a su aplicación (aquí Asum su aplicación llamada “a.out” y en el directorio actual):

 cat input.txt | ./a.out 

Verás el progtwig ejecutándose correctamente.