Curso de Programación en C/Prog121

De WikiCabal
Ir a la navegación Ir a la búsqueda

Prog121

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 
 5 #define MAXNOMBRELEN 20
 6 
 7 struct NombreConteo
 8 {
 9   char Nombre[MAXNOMBRELEN];
10   char Apellido[MAXNOMBRELEN];
11   int Letras;
12 };
13 
14 struct NombreConteo ObtenInfo( void );
15 struct NombreConteo mkInfo( struct NombreConteo );
16 void DesplegaInfo( const struct NombreConteo );
17 
18 int main( void )
19 {
20   struct NombreConteo Persona;
21 
22   Persona = ObtenInfo();
23   Persona = mkInfo( Persona );
24   DesplegaInfo( Persona );
25   return 0;
26 }
27 
28 struct NombreConteo ObtenInfo( void )
29 {
30   struct NombreConteo temp;
31 
32   printf( "Favor de ingresar su nombre: " );
33   if( fgets( temp.Nombre, MAXNOMBRELEN - 2, stdin ) &&
34              temp.Nombre[0] != '\n' )
35   {
36     if( *(temp.Nombre + strlen( temp.Nombre ) -1 ) != '\n' )
37     {
38       printf( "El Nombre que entraste es demasiado largo.\n"
39               "Solo %d chars MAX\n", MAXNOMBRELEN - 2 );
40       exit(1);
41     }
42 
43     *(temp.Nombre + strlen( temp.Nombre ) -1 ) = '\0';
44   }
45   else
46   {
47     puts( "Falta su Nombre" );
48     exit(1);
49   }
50 
51   printf( "Favor de ingresar su apellido paterno: " );
52   if( fgets( temp.Apellido, MAXNOMBRELEN - 2, stdin ) &&
53              temp.Apellido[0] != '\n' )
54   {
55     if( *(temp.Apellido + strlen( temp.Apellido ) -1 ) != '\n' )
56     {
57       printf( "El apellido paterno que entraste es demasiado largo.\n"
58               "Solo %d chars MAX\n", MAXNOMBRELEN - 2 );
59       exit(1);
60     }
61 
62     *(temp.Apellido + strlen( temp.Apellido ) -1 ) = '\0';
63   }
64   else
65   {
66     puts( "Falta su apellido paterno" );
67     exit(1);
68   }
69   return temp;
70 }
71 
72 struct NombreConteo mkInfo( struct NombreConteo info )
73 {
74   info.Letras = strlen( info.Nombre ) +
75                  strlen( info.Apellido );
76   return info;
77 }
78 
79 void DesplegaInfo( const struct NombreConteo info )
80 {
81   printf( "%s %s, tu nombre contiene %d Letras.\n",
82                info.Nombre, info.Apellido, info.Letras );
83 }

Resultado

[rrc@llawyr CClase]$ gcc -Wall -o Prog121 Prog121.c
[rrc@llawyr CClase]$ ./Prog121
Favor de ingresar su nombre: 
Falta su Nombre
[rrc@llawyr CClase]$ ./Prog121
Favor de ingresar su nombre: RichardConMuchasLetras
El Nombre que entraste es demasiado largo.
Solo 18 chars MAX
[rrc@llawyr CClase]$ ./Prog121
Favor de ingresar su nombre: Richard
Favor de ingresar su apellido paterno: Couture
Richard Couture, tu nombre contiene 14 Letras.
[rrc@llawyr CClase]$ 

Explicación