Diferencia entre revisiones de «Curso de Programación en C/Prog125»

De WikiCabal
Ir a la navegación Ir a la búsqueda
(Prog125)
 
(Sin diferencias)

Revisión actual del 23:58 7 jun 2014

Prog125

  1 #include <stdio.h>
  2 #include <stdlib.h>
  3 #include <string.h>
  4 #include <ctype.h>
  5 
  6 char DesplegaMenu( void );
  7 void ComeLinea( void );
  8 void Desplega( void (* fp)( char * ), char * str );
  9 void AMayuscula( char * );
 10 void AMinuscula( char * );
 11 void Invierta( char * );
 12 void Tonto( char * );
 13 
 14 int main(void)
 15 {
 16   char Linea[81];
 17   char Copia[81];
 18   char Seleccion;
 19   void (*pfun)(char *);   // Declarar un pointer a función, pfun, que tiene
 20                           // argumento de char * y no valor de returno
 21   printf( "\nIngresa una línea (<Enter> para terminar): " );
 22   while( fgets( Linea, 79, stdin ) && Linea[0] != '\n' )
 23   {
 24     if( *(Linea + strlen( Linea ) -1 ) != '\n' )
 25     {
 26       fputs( "La línea que entraste es demasiado largo.\nSolo 79 chars MAX",
 27                                                                      stderr );
 28       exit(1);
 29     }
 30     *(Linea + strlen( Linea ) -1 ) = '\0';
 31 
 32     while( ( Seleccion = DesplegaMenu() ) != 's' )
 33     {
 34       switch( Seleccion )
 35       {
 36         case 'y' : pfun = AMayuscula;   break;
 37         case 'n' : pfun = AMinuscula;   break;
 38         case 'i' : pfun = Invierta;     break;
 39         case 'o' : pfun = Tonto;        break;
 40       }
 41       strcpy( Copia, Linea );
 42       Desplega( pfun, Copia );
 43     }
 44     printf( "\nIngresa una línea (<Enter> para terminar): " );
 45   }
 46   puts( "\n¡Adios!\n" );
 47   return 0;
 48 }
 49 
 50 char DesplegaMenu( void )
 51 {
 52   char ans;
 53   puts( "\n\t\ty) Todo Mayúsculas  \t\tn) Todo Minúsculas" );
 54   puts( "\t\ti) Invertir         \t\to) Cómo original" );
 55   puts( "\t\ts) Siguiente string" );
 56   printf( "\tElige una opción: " );
 57   ans = getchar();
 58   ans = tolower(ans);
 59   ComeLinea();
 60   while( strchr( "ynios", ans ) == NULL )
 61   {
 62     printf( "\tElige y, n, i, o, o s: " );
 63     ans = tolower( getchar() );
 64     ComeLinea();
 65   }
 66   return ans;
 67 }
 68 
 69 void ComeLinea( void )
 70 {
 71   while( getchar() != '\n' )
 72     continue;
 73 }
 74 
 75 void AMayuscula( char * str )
 76 {
 77   while( *str )
 78   {
 79     *str = toupper( *str );
 80     str++;
 81   }
 82 }
 83 
 84 void AMinuscula( char * str )
 85 {
 86   while( *str )
 87   {
 88     *str = tolower( *str );
 89     str++;
 90   }
 91 }
 92 
 93 void Invierta( char * str )
 94 {
 95   while( *str )
 96   {
 97     if( islower( *str ) )
 98       *str = toupper( *str );
 99     else if( isupper( *str ) )
100       *str = tolower( *str );
101     str++;
102   }
103 }
104 
105 void Tonto(char * str)
106 {
107   // No cambio el string
108 }
109 
110 void Desplega( void (* fp)( char * ), char * str )
111 {
112     (*fp)( str ); // aplicar la función
113     printf( "\n\tEl Resultado: %s\n", str );
114 }

Resultado

[rrc@localhost CClase]$ gcc -Wall -o Prog125 Prog125.c
[rrc@localhost CClase]$ ./Prog125

Ingresa una línea (<Enter> para terminar): 

¡Adios!

[rrc@localhost CClase]$ ./Prog125

Ingresa una línea (<Enter> para terminar): Una Línea

		y) Todo Mayúsculas  		n) Todo Minúsculas
		i) Invertir         		o) Cómo original
		s) Siguiente string
	Elige un opción: y

	El Resultado: UNA LíNEA

		y) Todo Mayúsculas  		n) Todo Minúsculas
		i) Invertir         		o) Cómo original
		s) Siguiente string
	Elige un opción: n

	El Resultado: una línea

		y) Todo Mayúsculas  		n) Todo Minúsculas
		i) Invertir         		o) Cómo original
		s) Siguiente string
	Elige un opción: o

	El Resultado: Una Línea

		y) Todo Mayúsculas  		n) Todo Minúsculas
		i) Invertir         		o) Cómo original
		s) Siguiente string
	Elige un opción: i

	El Resultado: uNA líNEA

		y) Todo Mayúsculas  		n) Todo Minúsculas
		i) Invertir         		o) Cómo original
		s) Siguiente string
	Elige un opción: s

Ingresa una línea (<Enter> para terminar): OTRA línea

		y) Todo Mayúsculas  		n) Todo Minúsculas
		i) Invertir         		o) Cómo original
		s) Siguiente string
	Elige un opción: y

	El Resultado: OTRA LíNEA

		y) Todo Mayúsculas  		n) Todo Minúsculas
		i) Invertir         		o) Cómo original
		s) Siguiente string
	Elige un opción: r
	Elige y, n, i, o, o s: i

	El Resultado: otra LíNEA

		y) Todo Mayúsculas  		n) Todo Minúsculas
		i) Invertir         		o) Cómo original
		s) Siguiente string
	Elige un opción: n

	El Resultado: otra línea

		y) Todo Mayúsculas  		n) Todo Minúsculas
		i) Invertir         		o) Cómo original
		s) Siguiente string
	Elige un opción: o

	El Resultado: OTRA línea

		y) Todo Mayúsculas  		n) Todo Minúsculas
		i) Invertir         		o) Cómo original
		s) Siguiente string
	Elige un opción: s

Ingresa una línea (<Enter> para terminar): 

¡Adios!

[rrc@localhost CClase]$ 

Explicación