El siguiente código es mi respuesta al ejercicio 1-13 en K&R El lenguaje de programación C, que solicita un histograma para la longitud de las palabras en su entrada. Mi pregunta es con respecto a EOF. ¿Cómo puedo salir exactamente del ciclo while sin terminar el programa por completo? He usado Ctrl-Z, que según he oído es EOF en Windows, pero esto finaliza el programa, en lugar de interrumpir el ciclo while. ¿Cómo puedo llegar al ciclo for después del ciclo while sin finalizar el archivo? Esta es una pregunta general, no solo con mi código a continuación, sino para todo el código en K&R que usa: while ((c = getchar()) != EOF). ¡Gracias por adelantado! `
#include <stdio.h> #define MAXLENGTH 20 /* Max length of a word */ #define IN 1 /* In a word */ #define OUT 0 /* Out of a word */ int main() { int c, i, j, len = 0; int lenWords[MAXLENGTH]; bool state = OUT; for (i = 0; i < MAXLENGTH; ++i) { lenWords[i] = 0; } c = getchar(); while (c != EOF) { if (c != ' ' && c != '\n' && c != '\t') { if (state == IN) { lenWords[len - 1] += 1; /* a length 5 word is in subscript 4 */ len = 0; } state = OUT; } else { state = IN; } if (state == IN) { len += 1; } c = getchar(); } /* Generating a histogram using _ and | */ for (i = 0; i < MAXLENGTH; ++i) { /* Underscores write over one another; not so efficient */ for (j = 0; j < lenWords[i]; ++j) { putchar('_'); } putchar('\n'); for (j = 0; j < lenWords[i]; ++j) { putchar('_'); } putchar('|'); printf("Length: %d, Frequency: %d", i + 1, lenWords[i]); } return 0; }Creo que tu pregunta pertenece a otra red.
Respuestas aquí: ¿Equivalente a ^D (en bash) para cmd.exe?
No. Ctrl D en *nix genera un EOF, que varios shells interpretan como ejecución de
exit. El equivalente para EOF en Windows es Ctrl Z , pero cmd.exe no interpreta esto especialmente cuando se escribe en el aviso.
Tienes que comprobar si usas *nix o windows.
En Windows, EOF se representa con Ctrl+Z , mientras que en *nix EOF se representa con Ctrl+D