Diferencia entre revisiones de «Curso de Programación en C/Prog117»
Ir a la navegación
Ir a la búsqueda
(→Prog117) |
(Sin diferencias)
|
Revisión actual del 15:13 4 jun 2014
Prog117
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 #define MAXTITL 41
6 #define MAXAUTL 31
7 #define MAXVALL 10
8
9
10 struct Libro
11 {
12 char Titulo[MAXTITL];
13 char Autor[MAXAUTL];
14 float Valor;
15 };
16
17 int main( void )
18 {
19 int i;
20 char ValSTR[MAXVALL + 1];
21 struct Libro Biblio;
22
23 printf( "Ingresa el nombre del libro: " );
24
25
26 fgets( Biblio.Titulo, MAXTITL - 2, stdin );
27
28 if( *(Biblio.Titulo + strlen( Biblio.Titulo ) -1 ) != '\n' )
29 {
30 printf( "El nombre que entraste es demasiado largo.\n"
31 "Solo %d chars MAX\n", MAXTITL - 2 );
32 exit(1);
33 }
34 else
35 *(Biblio.Titulo + strlen( Biblio.Titulo ) -1 ) = '\0';
36
37 printf( "Ingresa el nombre del autor: " );
38
39 fgets( Biblio.Autor, MAXAUTL - 2, stdin );
40
41 if( *(Biblio.Autor + strlen( Biblio.Autor ) -1 ) != '\n' )
42 {
43 printf( "El nombre que entraste es demasiado largo.\n"
44 "Solo %d chars MAX\n", MAXAUTL - 2 );
45 exit(1);
46 }
47 else
48 *(Biblio.Autor + strlen( Biblio.Autor ) -1 ) = '\0';
49
50 printf( "Ingresa el valor: " );
51 scanf( "%10s", ValSTR );
52
53 if( strlen( ValSTR ) > MAXVALL -1 )
54 {
55 printf( "El valor que entraste es demasiado largo.\n"
56 "Solo %d chars MAX\n", MAXVALL - 1 );
57 exit(1);
58 }
59
60 if( ValSTR[0] == '-' )
61 {
62 puts( "No se permiten valores negativos." );
63 exit(1);
64 }
65
66 for( i = 0; i < strlen( ValSTR ) - 1; i++ )
67 {
68 if( ValSTR[i] < '0' || ValSTR[i] > '9' )
69 {
70 if( ValSTR[i] == '.' )
71 {
72 if( strlen( ValSTR ) - i > 3 )
73 {
74 puts( "Se permiten solo 2 decimales después del punto." );
75 exit(1);
76 }
77 }
78 else
79 {
80 puts( "Caracteres ilegales en su valor." );
81 exit(1);
82 }
83 }
84 }
85
86 Biblio.Valor = atof( ValSTR );
87
88 printf( "%s por %s: $%.2f\n", Biblio.Titulo,
89 Biblio.Autor, Biblio.Valor );
90 printf( "%s: \"%s\" ($%.2f)\n", Biblio.Autor,
91 Biblio.Titulo, Biblio.Valor );
92 printf( "Listo.\n" );
93
94 return 0;
95 }
Resultado
[rrc@llawyr CClase]$ gcc -Wall -o Prog117 Prog117.c [rrc@llawyr CClase]$ ./Prog117 Ingresa el nombre del libro: Mi Libro Ingresa el nombre del autor: El Autor Ingresa el valor: 345 Mi Libro por El Autor: $345.00 El Autor: "Mi Libro" ($345.00) Listo. [rrc@llawyr CClase]$ ./Prog117 Ingresa el nombre del libro: Mi Otro Libro Ingresa el nombre del autor: El otro Autor Ingresa el valor: -34.56 Se permiten valores negativos. [rrc@llawyr CClase]$ ./Prog117 Ingresa el nombre del libro: Un Otro Libro Ingresa el nombre del autor: Un Otro Auto Ingresa el valor: 4567543.34 El valor que entraste es demasiado largo. Solo 9 chars MAX [rrc@llawyr CClase]$ ./Prog117 Ingresa el nombre del libro: Otro Libro Ingresa el nombre del autor: Otro Autor Ingresa el valor: 34566.456 Se permiten solo 2 numerales después del punto. [rrc@llawyr CClase]$ ./Prog117 Ingresa el nombre del libro: Otro Libro Ingresa el nombre del autor: Otra Autora Ingresa el valor: 345r.56 Caracteres ilegales en su valor. [rrc@llawyr CClase]$ ./Prog117 Ingresa el nombre del libro: Ultimo Libro Ingresa el nombre del autor: Ultimo Autor Ingresa el valor: 435456.43 Ultimo Libro por Ultimo Autor: $435456.44 Ultimo Autor: "Ultimo Libro" ($435456.44) Listo. [rrc@llawyr CClase]$