Curso de Programación en C/Prog118
Ir a la navegación
Ir a la búsqueda
Prog118
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 #define MAXTITL 40
6 #define MAXAUTL 40
7 #define MAXVALL 12
8 #define MAXLIBROS 100
9
10 struct Libro {
11 char Titulo[MAXTITL];
12 char Autor[MAXAUTL];
13 float Valor;
14 };
15
16 int main( void )
17 {
18 struct Libro Biblioteca[MAXLIBROS];
19 int Conteo = 0,
20 Index,
21 NumPuntos,
22 i;
23 char ValSTR[MAXVALL];
24
25 printf( "Ingresa el nombre del libro: " );
26 while( Conteo < MAXLIBROS )
27 {
28 if( fgets( Biblioteca[Conteo].Titulo, MAXTITL - 2, stdin ) &&
29 Biblioteca[Conteo].Titulo[0] != '\n' )
30 {
31 if( *(Biblioteca[Conteo].Titulo +
32 strlen( Biblioteca[Conteo].Titulo ) -1 ) != '\n' )
33 {
34 printf( "El titulo que entraste es demasiado largo.\n"
35 "Solo %d chars MAX\n", MAXTITL - 2 );
36 exit(1);
37 }
38
39 *(Biblioteca[Conteo].Titulo +
40 strlen( Biblioteca[Conteo].Titulo ) -1 ) = '\0';
41 }
42 else
43 break;
44
45 printf( "Ingresa el nombre del autor: " );
46 if( fgets( Biblioteca[Conteo].Autor, MAXAUTL - 2, stdin ) &&
47 Biblioteca[Conteo].Autor[0] != '\n' )
48 {
49 if( *(Biblioteca[Conteo].Autor +
50 strlen( Biblioteca[Conteo].Autor ) -1 ) != '\n' )
51 {
52 printf( "El autor que entraste es demasiado largo.\n"
53 "Solo %d chars MAX\n", MAXAUTL - 2 );
54 exit(1);
55 }
56
57 *(Biblioteca[Conteo].Autor +
58 strlen( Biblioteca[Conteo].Autor ) -1 ) = '\0';
59 }
60 else
61 {
62 printf( "Faltan el nombre del autor de \"%s\"\n",
63 Biblioteca[Conteo].Titulo );
64 exit(1);
65 }
66
67 NumPuntos = 0;
68 printf( "Ingresa el valor: " );
69 if( fgets( ValSTR, MAXVALL - 2, stdin ) && ValSTR[0] != '\n' )
70 {
71 if( *(ValSTR + strlen( ValSTR ) -1 ) != '\n' )
72 {
73 printf( "El valor que entraste es demasiado largo.\n"
74 "Solo %d chars MAX\n", MAXVALL - 2 );
75 exit(1);
76 }
77
78 *(ValSTR + strlen( ValSTR ) -1 ) = '\0';
79
80 if( ValSTR[0] == '-' )
81 {
82 puts( "No se permiten valores negativos." );
83 exit(1);
84 }
85
86 for( i = 0; i < strlen( ValSTR ) - 1; i++ )
87 {
88 if( ValSTR[i] < '0' || ValSTR[i] > '9' )
89 {
90 if( ValSTR[i] == '.' )
91 {
92 if( ++NumPuntos > 1 )
93 {
94 fprintf( stderr, "Se permite solo 1 punto.\n" );
95 exit(1);
96 }
97
98 if( strlen( ValSTR ) - i > 3 )
99 {
100 puts( "Se permiten solo 2 decimales después del punto." );
101 exit(1);
102 }
103 }
104 else
105 {
106 puts( "Caracteres ilegales en su valor." );
107 exit(1);
108 }
109 }
110 }
111
112 Biblioteca[Conteo++].Valor = atof( ValSTR );
113 }
114 else
115 {
116 printf( "Faltan el valor de \"%s\"\n", Biblioteca[Conteo].Titulo );
117 exit(1);
118 }
119
120 if( Conteo < MAXLIBROS )
121 printf( "Ingresa el siguiente titulo: (<Enter> para terminar): " );
122 }
123
124 if (Conteo > 0)
125 {
126 puts( "Aquí está la lista de tus libros:" );
127 for (Index = 0; Index < Conteo; Index++)
128 printf( "\t\"%s\" por \"%s\": $%.2f\n", Biblioteca[Index].Titulo,
129 Biblioteca[Index].Autor, Biblioteca[Index].Valor);
130 }
131 else
132 puts( "Lo siento pero no tengo libros para mostrar." );
133
134 return 0;
135 }
Resultado
[rrc@llawyr CClase]$ gcc -Wall -o Prog118 Prog118.c [rrc@llawyr CClase]$ ./Prog118 Ingresa el nombre del libro: Lo siento pero no tengo libros para mostrar. [rrc@llawyr CClase]$ ./Prog118 Ingresa el nombre del libro: Libro 118 Ingresa el nombre del autor: Faltan el nombre del autor de "Libro 118" [rrc@llawyr CClase]$ gcc -Wall -o Prog118 Prog118.c [rrc@llawyr CClase]$ ./Prog118 Ingresa el nombre del libro: Libro 1 Ingresa el nombre del autor: Autor 1 Ingresa el valor: Faltan el valor de "Libro 1" [rrc@llawyr CClase]$ ./Prog118 Ingresa el nombre del libro: Libro 1 Ingresa el nombre del autor: Autor 1 Ingresa el valor: 34 Ingresa el siguiente titulo: (<Enter> para terminar): Aquí está la lista de tus libros: "Libro 1" por "Autor 1": $34.00 [rrc@llawyr CClase]$ ./Prog118 Ingresa el nombre del libro: Libro 1 Ingresa el nombre del autor: Autor 1 Ingresa el valor: 45.33 Ingresa el siguiente titulo: (<Enter> para terminar): Libro 2 Ingresa el nombre del autor: Autor 2 Ingresa el valor: 53 Ingresa el siguiente titulo: (<Enter> para terminar): Aquí es la lista de sus libros: "Libro 1" por "Autor 1": $45.33 "Libro 2" por "Autor 2": $53.00 [rrc@llawyr CClase]$