problemas para pasar una estructura a una funcion

Iniciado por mbolivar94, 29 Diciembre 2012, 03:35 AM

0 Miembros y 1 Visitante están viendo este tema.

mbolivar94

hola soy nuevo en este foro pero quisiera que me ayudaran con un ejercicio que me trae los pelos de punta. el problema BASICAMENTE es que cuando cuando introduzco los datos y mando a pedir el reporte el programa me da un numero totalmente erroneo debido a que no esta inicializando mis estructuras... agradecería la ayuda

/*desarrolle un programa el cual registre la entrada de 5 elementos a un almacen, guardando la cantidad y la fecha en la que este entro.tambien debe registrar los egresos de los mismos productos con su fecha correspondiante. finalmente el programa debe tener la opcion para emitir un reporta donde este registrado, LA ULTIMA FECHA DE INGRESO, LA ULTIMA FECHA DE DESPACHO Y LA CANTIDAD ACTUAL DEL PRODUCTO SOLICITADO... UTILIZE ESTRUCTURAS Y FUNCIONES */


#include<stdio.h>
#include<string.h>

struct lapiz {
int cantidad;
int diae;
int mese;
int anioe;
int dias;
int mess;
int años;
} l={0};

struct borra {
int cantidad;
int diae;
int mese;
int anioe;
int dias;
int mess;
int años;

} b={0};

struct sacapunta {
int cantidad;
int diae;
int mese;
int anioe;
int dias;
int mess;
int años;
} s={0};

struct papel {
int cantidad;
/*int diae;
int mese;
int anioe;
int dias;
int mess;
int años;*/

} p={0};

struct libro {
int cantidad;
int diae;
int mese;
int anioe;
int dias;
int mess;
int años;
} lb={0};

int cant;
int z=0;
int r=0;


int ingreso (struct lapiz l,struct borra b, struct sacapunta s, struct papel p, struct libro lb, int cant){
int a;
printf("selecciones el producto que este ingresando: 1.lapiz 2.borrador 3.saca puntas 4.papel 5.libros\n\n");
scanf("%d",&a);

printf("introduzca la cantidad a ingresar:\n");
scanf("%d",&cant);

switch (a)
{

case 1:
printf("introduzca la fecha de ingreso dd mm aa:\n");
scanf("%d %d %d",&l.diae,&l.mese,&l.anioe);
l.cantidad=l.cantidad + cant;

break;

case 2:
printf("introduzca la fecha de ingreso dd/mm/aa:\n");
scanf("%d %d %d",&b.diae, &b.mese, &b.anioe);
b.cantidad=b.cantidad + cant;
break;

case 3:
printf("introduzca la fecha de ingreso dd/mm/aa:\n");
scanf("%d %d %d",&s.diae, &s.mese, &s.anioe);
s.cantidad=s.cantidad + cant;
break;

case 4:
printf("introduzca la fecha de ingreso dd/mm/aa:\n");
scanf("%d %d %d",&p.diae, &p.mese, &p.anioe);
p.cantidad=p.cantidad + cant;
break;

case 5:
printf("introduzca la fecha de ingreso dd/mm/aa:\n");
scanf("%d %d %d",&lb.diae, &lb.mese, &lb.anioe);
lb.cantidad=lb.cantidad + cant;
break;
};
z=0;
return (z);
};

salida (struct lapiz l, struct borra b, struct sacapunta s, struct papel p, struct libro lb, int cant){
int g;
printf("selecciones el producto que este despachando: 1.lapiz 2.borrador 3.saca puntas 4.papel 5.libros\n");
scanf("%d",&g);

printf("introduzca la cantidad a ingresar;\n");
scanf("%d",&cant);

switch (g)
{

case 1:
printf("introduzca la fecha de ingreso dd mm aa:\n");
scanf("%d %d %d",&l.dias, &l.mess, &l.años);
l.cantidad=l.cantidad - cant;
break;

case 2:
printf("introduzca la fecha de ingreso dd mm aa:\n");
scanf("%d %d %d",&b.dias, &b.mess, &b.años);
b.cantidad=b.cantidad - cant;
break;

case 3:
printf("introduzca la fecha de ingreso dd mm aa:\n");
scanf("%d %d %d",&s.dias, &s.mess, &s.años);
s.cantidad=s.cantidad - cant;
break;

case 4:
printf("introduzca la fecha de ingreso dd/mm/aa:\n");
scanf("%d/%d/%d",&p.dias, &p.mess, &p.años);
p.cantidad=p.cantidad - cant;
break;

case 5:
printf("introduzca la fecha de ingreso dd mm aa:\n");
scanf("%d %d %d",&lb.dias, &lb.mess, &lb.años);
lb.cantidad=lb.cantidad - cant;
break;
};
};

consulta(struct lapiz l, struct borra b, struct sacapunta s, struct papel p, struct libro lb, int cant){
int c;
printf("selecciones el producto a consultar: 1.lapiz 2.borrador 3.saca puntas 4.papel 5.libros\n");
scanf("%d",&c);


switch (c)
{
case 1:
printf("la ultima fecha de entrada es: %d %d %d \n",l.diae,l.mese,l.anioe);
printf("la ultima fecha de salida es: %d %d %d \n",l.dias,l.mess,l.años);
printf("la cantidad actual del producto es %d \n:",l.cantidad);
break;

case 2:
printf("la ultima fecha de entrada es: %d %d %d \n",b.diae,b.mese,b.anioe);
printf("la ultima fecha de salida es: %d %d %d \n",b.dias,b.mess,b.años);
printf("la cantidad actual del producto es: %d\n",b.cantidad);
break;

case 3:

printf("la ultima fecha de entrada es: %d %d %d \n",s.diae,s.mese,s.anioe);
printf("la ultima fecha de salida es: %d %d %d \n",s.dias,s.mess,s.años);
printf("la cantidad actual del producto es %d\n:",s.cantidad);
break;

case 4:
printf("la ultima fecha de entrada es: %d %d %d \n",p.diae,p.mese,p.anioe);
printf("la ultima fecha de salida es: %d %d %d \n",p.dias,p.mess,p.años);
printf("la cantidad actual del producto es: %d\n",p.cantidad);
break;

case 5:
printf("la ultima fecha de entrada es: %d %d %d \n",lb.diae,lb.mese,lb.anioe);
printf("la ultima fecha de salida es: %d %d %d \n",lb.dias,lb.mess,lb.años);
printf("la cantidad actual del producto es:%d\n",lb.cantidad);
break;
};
};

main(){
int d;
struct lapiz l;
struct borra b;
struct sacapunta s;
struct papel p;
struct libro lb;
while (z==0){

printf("escoja la operacion a realizar 1. ingresar 2. despachar 3. consultar producto\n");
scanf("%d",&d);

switch (d){

case 1:
ingreso(l,b,s,p,lb,cant);
break;

case 2:
salida(l,b,s,p,lb,cant);
break;

case 3:
consulta(l,b,s,p,lb,cant);
break;
};
};
}

pude ver haciendo las mil marañas que mi problema es cuando paso mis estructuras dentro de las funciones...

zonahurbana

Si todas tus estructuras presentan los mismos campos (mismos datos miembro), sería bueno que uses una estructura en general llamada eAlmacen.
Luego existirían arreglos para cada tipo de elementos, un array lapiz, borra, sacapta, papel, libro.
Nunca dejar de aprender es importante, más allá del ritmo que se siga ...

durasno

Hola! tus problemas mas que nada son de conceptos:

1° toma en cuenta lo que dijo zonahurbana, ya que el codigo se va a reducir bastante

2° Creando las estructuras de esa manera estas declarando variables globales
struct lapiz {
int cantidad;
int diae;
int mese;
int anioe;
int dias;
int mess;
int años;
} l={0}; /*<---- variable global */

struct borra {
int cantidad;
int diae;
int mese;
int anioe;
int dias;
int mess;
int años;

} b={0}; /* <--- variable global */

/*...................*/

En el main volves a crear esas variables(con el mismo nombre) pero locales...
Si usas variables globales no es necesario pasarselo a funciones como argumentos(de echo estaria mal). Si usas variables locales tenes que revisar el concepto de: "pasaje de variables por valor o por referencia"


Saludos

PD: usa la etiqueta GeSHi para colocar codigo
Ahorrate una pregunta, lee el man