1.12 Escriba un programa que imprima su entrada una palabra por línea.
______________________________________________________________________________________________
SOLUCIÓN: Este programa recibe la cadena y la imprime palabra por línea, para hacer esto se usa las funciones getchar() y putchar(). El único punto en el que puede haber confusión es con el uso de la variable 'anterior', que controla los saltos de línea: si ya se ha cambiado y no se imprimió nada, entonces no se debe de saltar más. Si hay dos o más espacios en blanco '', tabuladores '\t' o saltos de línea '\n' consecutivos, se considera como si se tratara de uno sólo. Es bueno ejecutar este programa con un archivo de texto como entrada para apreciar lo anterior.
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * * * * * ESTE PROGRAMA RECIBE UNA CADENA DE CARACTERES Y LA IMPRIME PONIENDO * * CADA PALABRA EN UNA LINEA DISTINTA * * * * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * + * ALGORITMO: + * Pedir una cadena de caracteres al usuario + * Recibir la cadena caracter por caracter + * Si el caracter recibido es distinto a un espacio en blanco ' ', '\t' o salto de linea+ * '\n', imprimir el caracter + * De lo contrario: si no has hecho un salto de linea, cambiar de linea + * Si ya se ha hecho un salto de linea, entonces permanece en la linea actual + *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ # include <stdio.h> /*//////////////////////////////////////////////////////// // main /////////////////////////////////////////////////////////*/ int main() { // Abre main int c; int anterior = 'b'; /*Esta variable controla los saltos de linea inicialmente se considera que ya se ha hecho un salto, y por lo tanto hay que escribir en la linea actual */ printf("\nEste es un programa que recibe una cadena como entrada y da como salida la misma"); printf(" cadena escribiendo cada palabra en una linea distinta.\n"); printf("\nEOF para terminar.\n\n"); while ((c = getchar()) != EOF) { /* Abre while */ if ( ' ' != c && '\n' != c && '\t' != c) { /*Abre if*/ anterior = 'l'; putchar(c); } /*Cierra if*/ else { /* Abre else */ if ( 'l' == anterior ) /*Si no se ha cambiado de linea*/ { /*Abre if*/ printf("\n"); anterior = 'b'; /*Indica que ya se ha cambiado de linea*/ } /* Cierra if */ } } /* Cierra while */ } /* Cierra main */
_________________________________________________________________________________
Aquí un ejemplo de ejcución:
Entrada
Puedo escribir los versos más tristes esta noche
Salida:
Este es un programa que recibe una cadena como entrada y da como salida la misma cadena escribiendo cada palabra en una linea distinta. EOF para terminar. Puedo escribir los versos más tristes esta noche
__________________________________________________________________________________
Esta entrada forma parte de los problemas resueltos del libro EL Lenguaje de Programación C.
Entrada Anterior
Entrada Siguiente
Perfecto.
ResponderEliminarEl ejercicio lo realicé algo diferente pero viene siendo lo mismo.
Tengo un par de dudas:
Los operadores || OR y && AND no cumplen la función "que leeríamos", ya que si leemos exactamente la función.
if ( ' ' != c && '\n' != c && '\t' != c)
si (argumento AND argumento AND argumento)
con AND deberían de estar todas las condiciones.
A mi entender debería de cumplir un OR no un AND
si (argumento OR argumento OR argumento)
Otro asunto importante son los estados, ya que si no los incluimos y realizamos multiples espacios o tabuladores (para probar posibles errores en el programa) estos se escriben.