Sei sulla pagina 1di 3

#include<stdio.

h>
#define TAMANO 3

struct fecha {
int dd;
int mm;
int aa;
};

struct producto {
int codigo;
char descripcion[41];
float precio;
struct fecha fechavencimiento;
};

void cargar(struct producto vec[TAMANO])


{
int f;
for(f=0;f<TAMANO;f++)
{
printf("Ingrese codigo del producto:");
scanf("%i",&vec[f].codigo);
fflush(stdin);
printf("Ingrese descripcion:");
gets(vec[f].descripcion);
printf("Ingrese precio:");
scanf("%f",&vec[f].precio);
printf("Fecha de vencimiento.\n");
printf("Dia:");
scanf("%i",&vec[f].fechavencimiento.dd);
printf("Mes:");
scanf("%i",&vec[f].fechavencimiento.mm);
printf("Año:");
scanf("%i",&vec[f].fechavencimiento.aa);
}
}

void imprimir(struct producto vec[TAMANO])


{
int f;
for(f=0;f<TAMANO;f++)

{
printf("%i %s %0.2f %i/%i/%i\n",vec[f].codigo, vec[f].descripcion, vec[f].precio,
vec[f].fechavencimiento.dd, vec[f].fechavencimiento.mm, vec[f].fechavencimiento.aa);
}
}
int main()
{
struct producto vec[TAMANO];
cargar(vec);
imprimir(vec);
getch();
return 0;
}

En este problema declaramos dos registros, el orden en que se los declara es importante en el
lenguaje C, primero debemos declarar el struct fecha ya que el struct producto tiene un campo de
tipo fecha:
struct fecha {
int dd;
int mm;
int aa;
};

struct producto {
int codigo;
char descripcion[41];
float precio;
struct fecha fechavencimiento;
};
Si los declaramos al revés aparecerá un error sintáctico.
Cuando definimos un campo de un registro que es de otro tipo de dato registro debemos
anteceder la palabra clave struct y el nombre de tipo registro:
struct fecha fechavencimiento;
Cuando procedemos a cargar el vector y como sabemos cada campo de cada registro debe
cargarse por separado:
void cargar(struct producto vec[TAMANO])
{
int f;
for(f=0;f<TAMANO;f++)
{
printf("Ingrese codigo del producto:");
scanf("%i",&vec[f].codigo);
fflush(stdin);
printf("Ingrese descripcion:");
gets(vec[f].descripcion);
printf("Ingrese precio:");
scanf("%f",&vec[f].precio);
printf("Fecha de vencimiento.\n");
printf("Dia:");
scanf("%i",&vec[f].fechavencimiento.dd);
printf("Mes:");
scanf("%i",&vec[f].fechavencimiento.mm);
printf("Año:");
scanf("%i",&vec[f].fechavencimiento.aa);
}
}
Como vemos cuando cargamos el campo fechavencimiento que es un campo del struct producto
debemos hacerlo también campo a campo:
scanf("%i",&vec[f].fechavencimiento.dd);
printf("Mes:");
scanf("%i",&vec[f].fechavencimiento.mm);
printf("Año:");
scanf("%i",&vec[f].fechavencimiento.aa);
En la función main definimos un vector con componentes de tipo producto, en ningún momento
definimos un vector o registro de tipo fecha:
int main()
{
struct producto vec[TAMANO];
cargar(vec);
imprimir(vec);
getch();
return 0;
}
Lo mismo para imprimir todos los datos de los productos e inclusive el día, mes y año de
vencimiento de cada producto debemos indicarlos uno por uno:
void imprimir(struct producto vec[TAMANO])
{
int f;
for(f=0;f<TAMANO;f++)
{
printf("%i %s %0.2f %i/%i/%i\n",vec[f].codigo,
vec[f].descripcion, vec[f].precio,
vec[f].fechavencimiento.dd,
vec[f].fechavencimiento.mm, vec[f].fechavencimiento.aa);
}
}

Potrebbero piacerti anche