Progtwig C que cuenta palabras y líneas en entrada estándar

Soy nuevo en la progtwigción de C y actualmente estoy tratando de enseñarme cómo crear un progtwig de C que pueda contar palabras y líneas en el flujo de entrada e imprimir los dos totales en la salida estándar.

Lo que realmente estoy tratando de hacer es que el progtwig cuente el número de líneas y cuente el número de palabras dependiendo de la definición de una palabra en la que siento que estoy fuera.

Quiero que las palabras excluyan espacios en blanco, tabulaciones, nuevas líneas, guiones o dos puntos. Mientras se tiene el progtwig de salida los resultados (palabras y líneas) como decimales.

#include int main() { int iochar; int words; int lines; printf("Enter something here:\n\n"); while ((iochar = getchar ()) !=EOF) { if((iochar == ' ') || (iochar == '\t') || (iochar == '\n')) putchar(iochar); } return 0; } 

¿Estoy totalmente fuera de este progtwig?

Si tu pregunta es cómo arreglar el error de comstackción, eso es simple. Añadir una llave de cierre más al final.

Pero su progtwig seguirá haciendo solo una pasada por el bucle e imprimirá solo un carácter si y solo si el usuario escribe un espacio, una pestaña o una nueva línea. No importa lo que escriba el usuario, el progtwig terminará. Dudo que eso es lo que querías.

Sospecho que esto es lo que pretendías:

 while ((iochar = getchar ()) !=EOF) { if((iochar == ' ') || (iochar == '\t') || (iochar == '\n')) { putchar(iochar); } } return 0; 

Después de su “Estoy intentando que tus números estén justificados en un campo de 8 columnas …” No puedo entender lo que estás tratando de decir 🙁

 int words = 0; int lines = 0; char buffer[1024]; while(fgets(buffer, sizeof buffer, stdin)) { lines++; if(buffer[0] == '\n') continue; char *tmp = buffer-1; while(tmp = strchr(tmp+1, ' ')) words++; words++; /* count last word before \0*/ } printf("lines: %d, words: %d\n", lines, words); 

¿Es eso lo que necesitas / quieres?

El mensaje de error es:

Prueba.c: 20: 1: error: statement o statement esperada al final de la entrada

No se comstack porque le falta un } .

Si hubieras sangrado correctamente tu código, como tal, habrías encontrado tu error:

 #include int main() { int iochar; int words; int lines; printf("Enter something here:\n\n"); while ((iochar = getchar ()) !=EOF) { if((iochar==' ')||(iochar=='\t')||(iochar=='\n')) { putchar(iochar); iochar = getchar(); } return 0; } 

Otro ejemplo más de la importancia de la legibilidad 🙂