Created
September 21, 2013 21:54
-
-
Save danirod/6654598 to your computer and use it in GitHub Desktop.
ejemplo structs memoria estática
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
/* Estructura de un producto */ | |
typedef struct { | |
int codigo_producto; /* código del producto */ | |
char descripcion[20]; /* descripción del producto */ | |
float precio_unitario; /* precio del producto sin IVA */ | |
} t_producto; | |
/* Imprime los datos de un producto */ | |
void imprimir_producto(t_producto t) | |
{ | |
printf("%10d %-20s %.2f\n", t.codigo_producto, t.descripcion, t.precio_unitario); | |
} | |
/* Genera un saludo */ | |
void emitir_saludo() | |
{ | |
printf("* * * * * * * * * * * * * * * * * * * * * *\n"); | |
printf("* * SUPERMERCADOS MARCADONA * *\n"); | |
printf("* * Porque la calidad, no es lo primero * *\n"); | |
printf("* * * * * * * * * * * * * * * * * * * * * *\n"); | |
} | |
/* Lee un producto */ | |
t_producto leer_producto() | |
{ | |
t_producto p; | |
char entrada[80]; | |
/* leer el código de producto */ | |
printf("Código de producto: "); | |
fgets(entrada, 10, stdin); /* fgets es una función que lee de un archivo | |
un conjunto de caracteres. en este caso le | |
pedimos que lea de stdin (la entrada, el | |
teclado). como máximo puede leer 10 | |
caracteres y lo que vuelque lo guardará en | |
entrada */ | |
/* a veces fgets incluye el \n final. lo quitamos. para ello debemos ver | |
cuál es la última letra de la cadena. strlen es una función para | |
ver cuántas letras tiene una cadena. */ | |
if(entrada[strlen(entrada) - 1] == '\n') /* si la última letra es \n... */ | |
entrada[strlen(entrada) - 1] = '\0'; /* la dejamos en \0. */ | |
/* strtol es una función que convierte una cadena en un número long int. | |
su segundo parámetro no nos interesa así que lo dejamos como NULL. | |
su tercer parámetro es la base, como es un número decimal, es 10. */ | |
p.codigo_producto = (int) strtol(entrada, NULL, 10); | |
/* leer la descripción. el código es parecido al de lectura anterior */ | |
printf("Descripción: "); | |
fgets(p.descripcion, 20, stdin); | |
if(p.descripcion[strlen(p.descripcion) - 1] == '\n'); | |
p.descripcion[strlen(p.descripcion) - 1] = '\0'; | |
/* leer el precio. sigue siendo lo mismo que anteriormente. */ | |
printf("Precio: "); | |
fgets(entrada, 10, stdin); | |
if(entrada[strlen(entrada) - 1] == '\n') | |
entrada[strlen(entrada) - 1] = '\0'; | |
/* en este caso la función se llama strtof para convertir a floats*/ | |
p.precio_unitario = strtof(entrada, NULL); | |
return p; | |
} | |
/* Aplica el IVA */ | |
float aplicar_iva(float precio_base) | |
{ | |
// return precio_base * 1.16; | |
// return precio_base * 1.18; | |
return precio_base * 1.21; // RAJOY Y U MAD | |
} | |
int main(int argc, char** argv) | |
{ | |
t_producto productos[4]; | |
t_producto producto; | |
char decision; | |
int i, cantidad = 0; | |
float total = 0.0; | |
emitir_saludo(); /* buenos días */ | |
while(cantidad < 4) | |
{ | |
do | |
{ | |
printf("Hay %d productos en el carrito. ¿Pasamos otro? [s/n] ", cantidad); | |
decision = getchar(); /* leemos un caracter */ | |
while(getchar() == EOF); /* necesario para que se coma el \n */ | |
} | |
while(decision != 's' && decision != 'S' && decision != 'n' && decision != 'N'); | |
if(decision == 'n' || decision == 'N') break; /* si elige N, se acabó */ | |
producto = leer_producto(); | |
productos[cantidad++] = producto; | |
} | |
for(i = 0; i < cantidad; i++) | |
{ | |
imprimir_producto(productos[i]); | |
total += productos[i].precio_unitario; | |
} | |
printf("Total productos: %d\n", cantidad); | |
printf("Precio total sin IVA: %.2f\n", total); | |
printf("Precio total con IVA: %.2f\n", aplicar_iva(total)); | |
printf("\n\nBuenos días.\n"); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment