PDA

Ver la versión completa : [Ayuda] Tengo un problemilla con un programa :S



Endher
02/12/2008, 21:39
Buenas a todos.

A ver, tengo una práctica que hacer para la universidad. La hice hace un par de semanas y funciona y tal. Pero hoy en clase nos han dado cosillas nuevas, y he decidido hacer otra versión incluyendo eso. Digamos que la versión que funciona es la chabacana, y esta un poco más presentable. Total, que se lo he puesto, compilo, y 0 errores y 0 warnings, pero al linkar da un fallo que no entiendo :S a ver si alguien me puede echar un cable...

El código es este:

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

struct fecha
{
int anio;
int mes;
int dia;
};

struct empresa
{
char nombre[20];
char ubicacion[20];
struct fecha inauguracion;
};

typedef struct
{
char cod_clien [5];
char nombre[20];
char direccion[30];
char CIF[10];
}CLIENTES;

typedef struct
{
int cod_prod;
int coste_unitario;
}PRODUCTO;


void cargardatos (struct empresa *p);

void presentardatos (struct empresa up);

void leerclientes (CLIENTES *tab[], int n);

void escribirclientes (CLIENTES *tab[], int n);

void leerproductos (PRODUCTO *tabla[], int n);

void escribirproductos (PRODUCTO *tabla[], int n);

void buscarcodigo (CLIENTES *tab[], int n);

void presupuesto (PRODUCTO *tabla[], int n);

void main ()
{
int opcion;

char nada[1];

struct empresa p;

CLIENTES *tab[5];

PRODUCTO *tabla[5];

do
{
printf ("\n************************************************ *");
printf ("\n**** Seleccione la opcion que desea realizar ****");
printf ("\n\n1. DATOS EMPRESA FACTURACION");
printf ("\n2. VER DATOS EMPRESA FACTURACION");
printf ("\n3. DAR ALTAS DE CLIENTES");
printf ("\n4. VISUALIZAR DATOS DE CLIENTES");
printf ("\n5. DAR DE ALTA PRODUCTOS");
printf ("\n6. VISUALIZAR PRODUCTOS");
printf ("\n7. BUSCAR CLIENTE");
printf ("\n8. REALIZAR PRESUPUESTO");
printf ("\n9. FINALIZAR");
printf ("\n\n********************************************** ***");
printf ("\n\nQue opcion desea?... ");
do
{
scanf ("%i", &opcion);

if (opcion>9 || opcion==0)
printf ("\nIntroduzca una opcion valida:\n");
}while (opcion>9 || opcion==0);

switch (opcion)
{
case 1:
gets(nada);
cargardatos (&p);
break;

case 2:
gets(nada);
presentardatos (p);
break;

case 3:
gets (nada);
leerclientes (tab, 5);
break;

case 4:
escribirclientes (tab, 5);
break;

case 5:
gets(nada);
leerproductos (tabla, 5);
break;

case 6:
gets(nada);
escribirproductos (tabla, 5);
break;

case 7:
buscarcodigo (tab, 5);
break;

case 8:
presupuesto (tabla, 5);
break;

}
}while (opcion!=9);

getch();

}

void cargardatos (struct empresa *p)
{
printf ("\nIntroduzca los datos que se pediran a continuacion");
printf ("\nNombre de la empresa:\n");
gets(p->nombre);

printf ("\nUbicacion:\n");
gets(p->ubicacion);

printf ("\nFecha de inauguracion");
printf("\nDia: ");
scanf ("%i", &p->inauguracion.dia);
printf("\nMes: ");
scanf ("%i", &p->inauguracion.mes);
printf("\nAÒo: ");
scanf ("%i", &p->inauguracion.anio);

}

void presentardatos (struct empresa up)
{

printf ("\nEmpresa: %s", up.nombre);
printf ("\nUbicacion: %s", up.ubicacion);
printf ("\nFecha: %i/%i/%i", up.inauguracion.dia, up.inauguracion.mes, up.inauguracion.anio);

}

void leerclientes (CLIENTES *tab[], int n)
{
int i;

for (i=0; i<n; i++)
{
printf ("\nCodigo Cliente %i: ", i+1);
gets(tab[i]->cod_clien);
printf ("\nNombre Cliente %i: ", i+1);
gets(tab[i]->nombre);
printf ("\nDireccion Cliente %i: ", i+1);
gets(tab[i]->direccion);
printf ("\n CIF Cliente %i: ", i+1);
gets(tab[i]->CIF);
}
}

void escribirclientes (CLIENTES *tab[], int n)
{
int i;

for (i=0; i<n; i++)
{
printf ("\nCodigo Cliente %i: %s", i+1, tab[i]->cod_clien);
printf ("\nNombre Cliente %i: %s", i+1, tab[i]->nombre);
printf ("\nDireccion Cliente %i: %s", i+1, tab[i]->direccion);
printf ("\nCIF Cliente %i: %s", i+1, tab[i]->CIF);
}

}

void leerproductos (PRODUCTO *tabla[], int n)
{
int i;

for (i=0; i<n; i++)
{
printf("\nNumero del producto %i: ", i+1);
scanf("%i", &tabla[i]->cod_prod);
printf("\nCoste unitario del producto %i: ", i+1);
scanf("%i", &tabla[i]->coste_unitario);
}
}

void escribirproductos (PRODUCTO *tabla[], int n)
{
int i;

for (i=0; i<n; i++)
{
printf ("\nNumero del producto %i: %i", i+1, tabla[i]->cod_prod);
printf ("\nCoste unitario del producto %i: %i", i+1, tabla[i]->coste_unitario);
}
}

void buscarcodigo (CLIENTES *tab[])
{
char codigo[5];

int i;

printf ("\nIntroduzca el codigo que desea encontrar:\n");
gets(codigo);

for (i=0; i<5; i++)
{
if (strcmp(codigo, tab[i]->cod_clien)==0)
printf ("\nEl nombre del cliente es: %s", tab[i]->nombre);
}
}

void presupuesto (PRODUCTO *tabla[], int n)
{
int total, codigo_prod, cantidad, i;

printf ("\nIntroduzca el codigo del producto: ");
scanf ("%i", &codigo_prod);
printf ("\nIntroduzca la cantidad: ");
scanf ("%i", &cantidad);

for (i=0; i<n; i++)
{
if (codigo_prod==tabla[i]->cod_prod)
{
total=cantidad*tabla[i]->coste_unitario;
printf ("\nEl precio total es %i", total);
}
}
}

Si me echaseis un cable os lo agradecería eternamente.

Gracias de antemano :brindis:

The_Punisher
02/12/2008, 21:42
Soy yo o no pones el fallo de linkado?

Puck2099
02/12/2008, 21:42
Podrías empezar copiando el error que te da, ¿no? Así sin más nos podemos volver locos...

Endher
02/12/2008, 21:54
Vale, lo siento, estoy dormido [Ahhh]

Copio textualmente:

Linker Warning: No module definition file specified: using defaults
Linker Error: Undefined symbol buscarcodigo(CLIENTES far*far, int) in module EJ72.cpp

Gracias de nuevo :brindis:

xzakox
02/12/2008, 22:53
pues... llamas a una funcion buscarcodigo con dos parametros, y la tienes definida con uno.
La llamas en el case 7, con buscarcodigo (tab, 5) y la tienes definida solo con void buscarcodigo (CLIENTES *tab[])

Endher
02/12/2008, 23:12
Muchas gracias. Ahora si me ejecuta, pero al seleccionar la opción 3 y meter el primer dato me sale una cosa que no había visto nunca :S tengo un scan en el adjunto.

Gracias again :brindis:

Topochan
02/12/2008, 23:36
Eso es un segmentation fault, te acostumbraras XD
PD: el turbo c++!! OMG!!

pakoito
02/12/2008, 23:38
PD: el turbo c++!! OMG!!Wow por mi parte también...

Endher
03/12/2008, 21:45
El año pasado tocó MinGW, éste pues TurboC++ xD

Y no me podéis decir como solucionarlo? Tengo la otra para entregar, pero al menos me gustaría saber por qué petardea esto xD

Gracias y un saludo!

< - >
¿Nadie me puede ayudar? Es que según el profesor, era un problema de tipos. Le demostré que no y se ha ido sin decirme ni pío ¬¬

Un saludo!