Hey :)

Damn I hate pointers in C :P Worse thing possible. Anything I post my code:

main.c

#include <assert.h> 
#include <ctype.h> 
#include <errno.h> 
#include <float.h> 
#include <iso646.h> 
#include <limits.h> 
#include <locale.h> 
#include <math.h> 
#include <setjmp.h> 
#include <signal.h> 
#include <stdarg.h> 
#include <stddef.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h>
#include <time.h> 
#include <wchar.h> 
#include <wctype.h> 
#include <conio.h>


#include "estructuras.h"
#include "funciones.h"
#include "menus.h"


#define num 999

/* Localizado en menus.h */
void menuprincipal(cli *);
//void menucliente(cli *);
//void menuproductos();
//void menuempleado();



/* Localizado en funciones.h */
//void inicializar ();
//void confirmarcliente();
//void insertarcliente(cli *);
//void insertarempleado();
//void mostrarcliente(cli *);
//void inicializarporarchivo(cli *);



void main()
{
	
	cli *pc;
	pro *pp;
	emp *pe;

 	*pc=c[0];
	*pp=p[0];
	*pe=e[0];


	
	
	
	
		

	
	
	
	
	
//system("cls");
//inicializar();
//menuprincipal();
	//inicializarporarchivo(pc,pp,pe);
	menuprincipal(*pc);
	//guardarenfichero();
}

estructuras.h

#define num 999 // Para que sean todos las estructuras de 999

/* Estructuras principales */
struct direccion
		{
			char calle[15]; //Limitado a 15 characteres
			int numportal; //1 digito
			int piso; //1 digito
}; 
struct poblacion
		{
			char nombrepoblacion[15]; //Limitado a 15 characteres
			int codpostal; //Limitado a 5 digitos
			char provincia[15]; //Limitado a 15 characteres
}; 

struct empleados
{
	int id; // Limitado a una letra E seguido de 3 numeros
	char dni[11]; //Limitado a 8 numeros, un guion y una letra
	char nombre[15]; //Limitado a 15 characteres
	char apellido[15]; //Limitado a 15 characteres
	int telefono; //Limitado a 9 digitos
	struct direccion dir; // Una variable que es de tipo estructura dirrecion: acesso a calle,
						  //Numportal, y piso
	struct poblacion pob; // Una variable que es de tipo estructura poblacion: accesso a
						  // nombrepoblacion, codpostal, y provincia
};
typedef struct empleados e[num];
typedef struct empleados emp; 




/* Asi podemos insertar hasta 999 productos, porque he creado 
la tabla que contiene num elementos de tipo empleados: Este numero es el mismo que el id */



struct clientes
{
	int id; // Limitado a una letra C seguido de 3 numeros
	char dni[11]; //Limitado a 8 numeros, un espacio y una letra
	char nombre[15];//Limitado a 15 characteres
	char apellido[15];//Limitado a 15 characteres
	int telefono;//Limitado a 6 digitos
	struct direccion dir; // Una variable que es de tipo estructura dirrecion: acesso a calle,
						  //Numportal, y piso
	struct poblacion pob; // Una variable que es de tipo estructura poblacion: accesso a
						  // nombrepoblacion, codpostal, y provincia
	int cantcompras; // La cantidad de comprars para los descuentos

}; 
typedef struct clientes c[num];
typedef struct clientes cli;

/* Asi podemos insertar hasta 999 productos, porque he creado 
la tabla que contiene num elementos de tipo cliente: Este numero es el mismo que el id */




struct productos
{
	
	int id; // Limitado a una letra P seguido de 3 numeros
	char nombre[15]; //Limitado a 15 characteres
	char descripcion[50]; //Limitado a 50 characteres
	float precio; // Precio con decimal
	int cantidad; //Lo que queda en stock

}; 
typedef struct productos p[num];
typedef struct productos pro;
/* Asi podemos insertar hasta 999 productos, porque he creado 
la tabla que contiene num elementos de tipo producto: Este numero es el mismo que el id */

funciones.h

//#include "estructuras.h"



void menuprincipal(cli *);
//void menuempleado();
void menucliente(cli *);
//void menuproductos();



void inicializarporarchivo(cli *pc)
{
	FILE *ficheroc;
	FILE *ficheroe;
	FILE *ficherop;

	int i=0;
	char tid[4];
	char ttelefono[9];
	char tcantcompras[1];
	char tnumportal[2];
	char tpiso[1];
	char tcodpostal[5];


	//malloc????

	ficheroc=fopen("clientes.txt","r");
	ficheroe=fopen("empleados.txt","r");
	ficherop=fopen("productos.txt","r");
	
	if (ficheroc==NULL)
	{
		printf ("no Encuentro!");
		getch();
		//inicializar();
		inicializar (*pc);
	}
	
	

	if (ficheroc!=NULL)
	{
		printf ("Encuentro!");

		do
		{
			for (i=0;i<999;i++) 
			{
			/*	c=fgetc(ficheroc);
				if ((c!=EOF) && (c!='\n'))
					c[i].nombre=c;
			}


			do
			{
				getc(c[i].id);
				ficheroc++;

			}while (ficheroc!="\n");*/
			
				fgets(tid,sizeof(tid),ficheroc);
				pc->id=atoi(tid);
			
		/*	do
			{*/
				
				fgets(pc->dni,sizeof(pc->dni),ficheroc);
		/*	}while (fgets!='\n');*/
			
		/*	do
			{*/
				fgets(pc->nombre,sizeof(pc->nombre),ficheroc);
		/*	}while (fgets!='\n');*/

			/*do
			{*/
				fgets(pc->apellido,sizeof(pc->apellido),ficheroc);
		/*	}while (fgets!='\n');*/

			/*do
			{*/
				fgets(ttelefono,sizeof(ttelefono),ficheroc);
		/*	}while (fgets!='\n');*/
				pc->telefono=atoi(ttelefono);

			/*do
			{*/
				fgets(tcantcompras,sizeof(tcantcompras),ficheroc);
		/*	}while (fgets!='\n');*/
				pc->cantcompras=atoi(tcantcompras);

		/*	do
			{*/
				fgets(pc->dir.calle,sizeof(pc->dir.calle),ficheroc);
		/*	}while (fgets!='\n');*/
			
			/*do
			{*/
				fgets(tnumportal,sizeof(tnumportal),ficheroc);
		/*	}while (fgets!='\n');*/
				pc->dir.numportal=atoi(tnumportal);

			/*do
			{*/
				fgets(tcodpostal,sizeof(tcodpostal),ficheroc);
		/*	}while (fgets!='\n');*/
				pc->pob.codpostal=atoi(tcodpostal);

			/*do
			{*/
				fgets(tpiso,sizeof(tpiso),ficheroc);
		/*	}while (fgets!='\n');*/
				pc->dir.piso=atoi(tpiso);

		/*	do
			{*/
				fgets(&pc->pob.nombrepoblacion,sizeof(pc->pob.nombrepoblacion),ficheroc);
			/*}while (fgets!='\n');*/

			//do
			//{
				fgets(pc->pob.provincia,sizeof(pc->pob.provincia),ficheroc);
				pc++;
		/*	}while (fgets!='\n');*/
			}
		}while (!feof(ficheroc));
		fclose(ficheroc);
		
	}		
}




/* Esta funcion nos permite inicializar todas las estructuras */
/* Recorremos todos los clientes, empleados y productos hasta 999 y ponemos sus campos a 0*/
void inicializar (cli *pc)
{ // Principio de funciones inicizalizar
	int a=0; // 1 Contador

	/********************* Inicializamos la estructura de clientes *************************/
	/* Campos int id, char dni, char nombre, char apellido, int telefono */
	
	
	for (a=0;a<999;a++) 
	{
		
		pc->id=0;
		strcpy(pc->dni,"0");
		strcpy(pc->nombre,"0");
		strcpy(pc->apellido,"0");
		pc->telefono=0;
		pc->cantcompras=0;
		strcpy(pc->dir.calle,"0");
		pc->dir.numportal=0;
		pc->dir.piso=0;
		pc->pob.codpostal=0;
		strcpy(pc->pob.nombrepoblacion,"0");
		strcpy(pc->pob.provincia,"0");
		pc++;
	}
	/***************** Fin de inicializacion de clientes ******************************/


	/********************* Inicializamos la estructura de empleados *************************/
	/* Campos: int id, char dni, char nombre, char apellido, int telefono */
/*
	for (a=0;a<999;a++) 
	{
		*pe->id=0;
		strcpy(*pe->dni,"0");
		strcpy(*pe->nombre,"0");
		strcpy(*pe->apellido,"0");
		*pe->telefono=0;
		strcpy(*pe->dir.calle,"0");
		*pe->dir.numportal=0;
		*pe->dir.piso=0;
		*pe->pob.codpostal=0;
		strcpy(*pe->pob.nombrepoblacion,"0");
		strcpy(*pe->pob.provincia,"0");
		pe++;
	
		
	}*/
	/********************* Fin de inicializacion de empleados ******************************/
	

	


	/***************** Inicializamos la estructura de productos ***********************/

/*	for (a=0;a<999;a++) // Este for permite que cada 999 de los productos lo ponga a 0
	{
		*pp->id=0;
		strcpy(*pp->nombre,"0");
		strcpy(*pp->descripcion,"0");
		*pp->precio=0.0;
		*pp->cantidad=0;
		pp++;
	}*/

	/***************** Fin de inicializacion de productos ******************************/

} // Fin de funciones de inicializar


/********************************FUNCIONES DE INSERTAR***************************************/
/*
void guardarenfichero(cli pc, empleados *pe,productos *pp)
{
	int i=1;
	FILE *ficheroc;
	FILE *ficheroe;
	FILE *ficherop;

	//printf ("Hola");
	//getch();
	ficheroc=fopen("clientes.txt","w");
	
	fputs("Cliente ",ficheroc);
	fputs(&i,ficheroc);
	fputs(":",ficheroc);
	fputs('\n',ficheroc);
	fputs(pc->id,ficheroc);
	fputs("\n",ficheroc);
	fputs(pc->nombre,ficheroc);
	fclose(ficheroc);
}
*/
void insertarcliente(cli *pc)
{
	char dni[11];
	char letra;
	int id;
	int val=0;


	do
	{
	system ("cls");
	printf ("Que numero deseas utilizar de indentificador? (1-999)");
	scanf ("%d",&id);

		if ((id<1) || (id>999))
		{
			printf ("El numero de id no es valido!");
			getch();
			val=0;
		}
		if ((id>=1) && (id<=999))
		{
		val=1;
			if (pc->id!=0)
			{
				printf ("Este numero ya esta siendo utilizado!");
				getch();
				val=0;
			}
		}
	}while ((val!=1) || (val==0));
		
		pc->id=id;
		
		system("cls");
		printf ("Estas en el cliente C-%d\nIntroduce los 8 digitos del DNI\n",pc->id);
		fflush(stdin);
		flushall();
		scanf ("%8s",dni);

		printf ("Introduce la letra del DNI\n");
		flushall();
		scanf("%1c",letra);
		strcpy(pc->dni,dni);
		strcat(pc->dni,"-");
		strcat(pc->dni,letra);
		
		printf ("Introduce el nombre del cliente\n");
		fflush(stdin);
		fgets(pc->nombre,15,stdin);
		
		printf ("Introduce el apellido del cliente\n");
		fflush(stdin);
		fgets(pc->apellido,15,stdin);

		printf ("Introduce la calle donde vive el cliente\n");
		fflush(stdin);
		fgets(pc->dir.calle,15,stdin);
	
		printf ("Introduce el numero de portal/casa del cliente\n");
		fflush(stdin);
		scanf ("%1i",&(pc->dir.numportal));

		printf ("Introduce el numero de piso (0 si es un bajo/casa individual)\n");
		fflush(stdin);
		scanf ("%1i",&(pc->dir.piso));

		printf ("Introduce la poblacion donde vive el cliente\n");
		fflush(stdin);
		fgets(pc->pob.nombrepoblacion,sizeof(pc->pob.nombrepoblacion),stdin);

		printf ("Introduce la provincia donde vive el cliente\n");
		fflush(stdin);
		fgets(pc->pob.provincia,sizeof(pc->pob.provincia),stdin);

		printf ("Introduce el codigo postal de 5 digitos del cliente\n");
		fflush(stdin);
		scanf ("%5i",&(pc->pob.codpostal));
		flushall();

		printf ("Introduce el numero de telefono, con prefijo, del cliente\n");
		fflush(stdin);
		scanf ("%9i",&(pc->telefono));

	//	printf ("ID: C-%d\nDNI: %s\nNombre: %s\nApellido: %s\nCalle: %s\nNumero portal/casa: %d\nNumero piso: %d\nPoblacion: %s\nProvincia: %s\nCodigo Postal: %d\nTelefono: %d\n",c[id].id,c[id].dni,c[id].nombre,c[id].apellido,c[id].dir.calle,c[id].dir.numportal,c[id].dir.piso,c[id].pob.nombrepoblacion,c[id].pob.provincia,c[id].pob.codpostal,c[id].telefono);
		printf ("Pulse intro para volver al menu principal\n");
		getch();
menuprincipal(pc);
}


/*

void insertarempleado()
{
	char dni[11];
	char letra[1];
	int id;
	int val=0;

	do
	{
	system ("cls");
	printf ("Que numero deseas utilizar de indentificador? (1-999)");
	scanf ("%d",&id);

		if ((id<1) || (id>999))
		{
			printf ("El numero de id no es valido!");
			getch();
			val=0;
		}
		if ((id>=1) && (id<=999))
		{
		val=1;
			if (e[id].id!=0)
			{
				printf ("Este numero ya esta siendo utilizado!");
				getch();
				val=0;
			}
		}
	}while ((val!=1) || (val==0));
		
		e[id].id=id;
		
		system("cls");
		printf ("Estas en el empleado E-%d\nIntroduce los 8 digitos del DNI\n",e[id].id);
		fflush(stdin);
		flushall();
		scanf ("%8s",dni);

		printf ("Introduce la letra del DNI\n");
		flushall();
		scanf("%1s",letra);
		strcpy(e[id].dni,dni);
		strcat(e[id].dni,"-");
		strcat(e[id].dni,letra);
		
		printf ("Introduce el nombre del empleado\n");
		fflush(stdin);
		fgets(e[id].nombre,sizeof e[id].nombre,stdin);
		
		printf ("Introduce el apellido del empleado\n");
		fflush(stdin);
		fgets(e[id].apellido,sizeof e[id].apellido,stdin);

		printf ("Introduce la calle donde vive el empleado\n");
		fflush(stdin);
		fgets(e[id].dir.calle,sizeof e[id].dir.calle,stdin);
	
		printf ("Introduce el numero de portal/casa del empleado\n");
		fflush(stdin);
		scanf ("%1i",&e[id].dir.numportal);

		printf ("Introduce el numero de piso (0 si es un bajo/casa individual)\n");
		fflush(stdin);
		scanf ("%1i",&e[id].dir.piso);

		printf ("Introduce la poblacion donde vive el empleado\n");
		fflush(stdin);
		fgets(e[id].pob.nombrepoblacion,sizeof e[id].pob.nombrepoblacion,stdin);

		printf ("Introduce la provincia donde vive el empleado\n");
		fflush(stdin);
		fgets(e[id].pob.provincia,sizeof e[id].pob.provincia,stdin);

		printf ("Introduce el codigo postal de 5 digitos del empleado\n");
		fflush(stdin);
		scanf ("%5i",&e[id].pob.codpostal);
		flushall();

		printf ("Introduce el numero de telefono, con prefijo, del empleado\n");
		fflush(stdin);
		scanf ("%9i",&e[id].telefono);

		printf ("ID: E-%d\nDNI: %s\nNombre: %s\nApellido: %s\nCalle: %s\nNumero portal/casa: %d\nNumero piso: %d\nPoblacion: %s\nProvincia: %s\nCodigo Postal: %d\nTelefono: %d\n",e[id].id,e[id].dni,e[id].nombre,e[id].apellido,e[id].dir.calle,e[id].dir.numportal,e[id].dir.piso,e[id].pob.nombrepoblacion,e[id].pob.provincia,e[id].pob.codpostal,e[id].telefono);
		printf ("Pulse intro para volver al menu principal\n");
		getch();
menuprincipal();
}


void insertarproducto()
{
	int id;
	int val=0;
	

	do
	{
	system ("cls");
	printf ("Que numero deseas utilizar de indentificador? (1-999)");
	scanf ("%d",&id);
		if ((id<1) || (id>999))
		{
			printf ("El numero de id no es valido!");
			getch();
			val=0;
		}
		if ((id>=1) && (id<=999))
		{
		val=1;
			if (p[id].id!=0)
			{
				printf ("Este numero ya esta siendo utilizado!");
				getch();
				val=0;
			}
		}
	}while ((val!=1) || (val=0));
		
		p[id].id=id;
		
		system("cls");
		printf ("Estas en el producto P-%d\n",p[id].id);
		

		printf ("Introduce el nombre del producto ");
		fflush(stdin);
		fgets(p[id].nombre,sizeof p[id].nombre,stdin);

		printf ("Introduce una descripcion para el producto ");
		fflush(stdin);
		fgets(p[id].descripcion,sizeof p[id].descripcion,stdin);

		printf ("Introduce el precio del producto ");
		scanf ("%2f",p[id].precio);

		printf ("Introduce el stock de este producto ");
		scanf ("%i",p[id].cantidad);

		printf ("Nombre: %s/n Descripcion: %s/n Precio: %2f/n Stock: %i/n",p[id].nombre,p[id].descripcion,p[id].precio,p[id].cantidad);
		getch();
		

menuprincipal();

}



/*****************************FIN DE FUNCIONES DE INSERTAR*************************************/

/****************************FUNCIONES DE MOSTRAR********************************************/

/* Las funciones de mostrar funcionan de la siguiente manera: Se le pone un limite al ID que se
va mostrar. Hasta ese limite se mostrara todos los datos de ese cliente/empleado/producto si 
existe y se a creado previamente el cliente/empleado/producto */

void mostrarcliente(cli *pc)
{
	int nu;
	int i;
	do
	{
		system("cls");
		printf ("Introduce hasta que numero quieres mostrar:");
		scanf ("%d",&nu);
		if ((nu>999) || (nu<1)) //Otra comprobacion si es normal el numero insertado
			{
			system ("cls");
			printf ("No es valido este numero!");
			}
	}while ((nu>999) || (nu<1));
	
	for (i=0;i<=nu;i++)
	{
		if (pc->id!=0)
		{
		printf ("ID: C-%d\n",pc->id);
		printf ("DNI: %s\n",pc->dni);
		printf ("Nombre: %s\n",pc->nombre);
		printf ("Apellido: %s\n",pc->apellido);
		printf ("Direccion \n Calle: %s \n Numero Portal:%d \n Piso:%d \n",pc->dir.calle,pc->dir.numportal,pc->dir.piso);
		printf ("Poblacion \n Codigo Postal: %d \n Nombre: %s \n Provincia %s \n",pc->pob.codpostal,pc->pob.nombrepoblacion,pc->pob.provincia);
		printf ("Telefono: %d \n",pc->telefono);
		printf ("Cantidad de compras realizadas: %d \n",pc->cantcompras);
		getch();
		}
	}
menuprincipal(pc);
}
/*
void mostrarempleado()
{
	int nu;
	int i;
	do
	{
		system("cls");
		printf ("Introduce hasta que numero quieres mostrar:");
		scanf ("%d",&nu);
		if ((nu>999) || (nu<1))
			{
			system ("cls");
			printf ("No es valido este numero!");
			}
	}while ((nu>999) || (nu<1));
	
	for (i=0;i<=nu;i++)
	{
		if (e[i].id!=0)
		{
		printf ("ID: E-%d\n",e[i].id);
		printf ("DNI: %s\n",e[i].dni);
		printf ("Nombre: %s\n",e[i].nombre);
		printf ("Apellido: %s\n",e[i].apellido);
		printf ("Direccion: \n Calle: %s \n Numero Portal: %d \n Piso: %d\n",e[i].dir.calle,e[i].dir.numportal,e[i].dir.piso);
		printf ("Poblacion: Codigo Postal: %d \n Nombre: %s \n Provincia %s \n",e[i].pob.codpostal,e[i].pob.nombrepoblacion,e[i].pob.provincia);
		printf ("Telefono: %d \n",e[i].telefono);
		getch();
		}
	}
menuprincipal();
}

void mostrarproducto()
{
	int nu;
	int i;
	do
	{
		system("cls");
		printf ("Introduce hasta que numero quieres mostrar:");
		scanf ("%d",&nu);
		if ((nu>999) || (nu<1))
			{
			system ("cls");
			printf ("No es valido este numero!");
			}
	}while ((nu>999) || (nu<1));
	
	for (i=0;i<=nu;i++)
	{
		if (p[i].id!=0)
		{
		printf ("ID: P-%d\n",p[i].id);
		printf ("Nombre: %s\n",p[i].nombre);
		printf ("Descripcion: %s\n",p[i].descripcion);
		printf ("Precio: %f2\n",p[i].precio);
		printf ("Stock: %i\n",p[i].cantidad);
		printf (" \n");
		getch();
		}
	}
menuprincipal();
}

/************************************FIN DE FUNCIONES DE MOSTRAR*******************************/


/*************************************FUNCIONES DE ELIMINAR****************************/
void eliminarcliente(cli *pc)
{
	int id;
	int val;
	char confir=' ';

	do
	{
	system("cls");
	printf ("Que ID quieres eliminar?\n");
	scanf ("%d",&id);
	

	if ((id<1) || (id>999))
		{
			printf ("El numero de id no es valido!");
			getch();
			val=0;
		}
	}while (val=0);


	if ((id>=1) && (id<=999))
		{
			if (pc->id==0)
			{
				printf ("Este cliente no existe!");
				getch();
				menucliente(pc);
			}
			else
				val=1;
		}
	

	
	if (val==1)
		{
			
			printf ("ID: C-%d\n",pc->id);
			printf ("DNI: %s\n",pc->dni);
			printf ("Nombre: %s\n",pc->nombre);
			printf ("Apellido: %s\n",pc->apellido);
			printf ("Telefono: %i\n",pc->telefono);
			printf ("Direccion: %s\n",pc->dir.calle);
			printf ("Nombre de poblacion: %s\n",pc->pob.nombrepoblacion);
			printf ("Nombre de provincia: %s\n",pc->pob.provincia);
			printf ("Numero de codigo postal: %d\n",pc->pob.codpostal);
			printf ("Numero de portal: %d\n",pc->dir.numportal);
			printf ("Numero de piso: %d\n",pc->dir.piso);
			printf ("Canitdad de compras: %d\n",pc->cantcompras);
			
		
			do
				{
				printf ("\nEstas seguro que quieres eliminar este cliente? S o N");
				scanf ("%c",&confir);
				}while ((confir!='S') && (confir!='N') && (confir!='s') && (confir!='n'));

			if ((confir=='s') || (confir=='S'))
			{
				pc->id=0;
				strcpy(pc->dni,"0");
				strcpy(pc->nombre,"0");
				strcpy(pc->apellido,"0");
				pc->telefono=0;
				strcpy(pc->dir.calle,"0");
				pc->dir.numportal=0;
				pc->dir.piso=0;
				pc->pob.codpostal=0;
				strcpy(pc->pob.nombrepoblacion,"0");
				strcpy(pc->pob.provincia,"0");
				pc->cantcompras=0;
				printf ("Eliminado!\n Pulse intro para continuar");
				getch();
				menuprincipal(pc);
			}
			if ((confir=='n') || (confir=='N'))
			{
				menuprincipal(pc);
			}
		}
}
/*
void eliminarempleado()
{
	int id;
	int val;
	char confir;

	do
	{
	system("cls");
	printf ("Que ID quieres eliminar?\n");
	scanf ("%d",&id);
	

	if ((id<1) || (id>999))
		{
			printf ("El numero de id no es valido!");
			getch();
			val=0;
		}
	}while (val=0);


	if ((id>=1) && (id<=999))
		{
			if (e[id].id==0)
			{
				printf ("Este empleado no existe!");
				getch();
				menuempleado();
			}
			else
				val=1;
		}
	

	
	if (val==1)
		{
			
			printf ("ID: E-%d\n",e[id].id);
			printf ("DNI: %s\n",e[id].dni);
			printf ("Nombre: %s\n",e[id].nombre);
			printf ("Apellido: %s\n",e[id].apellido);
			printf ("Telefono: %i\n",e[id].telefono);
			printf ("Direccion: %s\n",e[id].dir.calle);
			printf ("Nombre de poblacion: %s\n",e[id].pob.nombrepoblacion);
			printf ("Nombre de provincia: %s\n",e[id].pob.provincia);
			printf ("Numero de codigo postal: %d\n",e[id].pob.codpostal);
			printf ("Numero de portal: %d\n",e[id].dir.numportal);
			printf ("Numero de piso: %d\n",e[id].dir.piso);
			
		
			do
				{
				printf ("\nEstas seguro que quieres eliminar este empleado? S o N");
				scanf ("%c",&confir);
				}while ((confir!='S') && (confir!='N') && (confir!='s') && (confir!='n'));

			if ((confir=='s') || (confir=='S'))
			{
				e[id].id=0;
				strcpy(e[id].dni,"0");
				strcpy(e[id].nombre,"0");
				strcpy(e[id].apellido,"0");
				e[id].telefono=0;
				strcpy(e[id].dir.calle,"0");
				e[id].dir.numportal=0;
				e[id].dir.piso=0;
				e[id].pob.codpostal=0;
				strcpy(e[id].pob.nombrepoblacion,"0");
				strcpy(e[id].pob.provincia,"0");
				printf ("Eliminado!\n Pulse intro para continuar");
				getch();
				menuprincipal();
			}
			if ((confir=='n') || (confir=='N'))
			{
				menuprincipal();
			}
		}
}




void eliminarproducto()
{
int id;
	int val;
	char confir;

	do
	{
	system("cls");
	printf ("Que ID quieres eliminar?\n");
	scanf ("%d",&id);
	

	if ((id<1) || (id>999))
		{
			printf ("El numero de id no es valido!");
			getch();
			val=0;
		}
	}while (val=0);




	if ((id>=1) && (id<=999))
		{
			if (p[id].id==0)
			{
				printf ("Este producto no existe!");
				getch();
				menuproductos();
			}
			else
				val=1;
		}

	if (val==1)
		{
			
			printf ("ID: P-%d\n",p[id].id);
			printf ("Nombre: %s\n",p[id].nombre);
			printf ("Descripcion: %s\n",p[id].descripcion);
			printf ("Precio: %2f\n",p[id].precio);
			printf ("Stock: %i\n",p[id].cantidad);
		}

				do
				{
				printf ("\nEstas seguro que quieres eliminar este producto? S o N");
				scanf ("%c",&confir);
				}while ((confir!='S') && (confir!='N') && (confir!='s') && (confir!='n'));

			if ((confir=='s') || (confir=='S'))
			{
				p[id].id=0;
				strcpy(p[id].nombre,"0");
				strcpy(p[id].descripcion,"0");
				p[id].precio=0.0;
				p[id].cantidad=0;
				printf ("Eliminado!\n Pulse intro para continuar");
				getch();
				menuprincipal();
			}
			if ((confir=='n') || (confir=='N'))
			{
				menuprincipal();
			}
}


*/
int dniesvalido(char dni[11],cli *cp)
{
	int inc=0;
	char *p;
	p=dni;


	if (strlen(dni)-1!=8)
	{
		printf ("El DNI tiene que tener 8 digitos!");
		getch();
		inc=1;
		return(0);
	}

	/*Metodo 2 con puntero*/
	do
	{
		if ((atoi(dni)==0) && (inc==0))
		{
			if (*p=="-" || (isalpha(*p)==0))
			{
			printf ("Los primeros 8 numeros del DNI incluye un caracter invalido!");
			getch();
			inc=1;
			return(0);
			}
		}
		p++;
		
	}while((p!="\0") && (inc==0));

	if (isalpha(dni[10])==0)
	{
		printf ("El DNI incluye una letra invalida!");
		getch();
		inc=1;
		return(0);
	}

	if (inc!=1)
	{
		return(1);
	}

}

menus.h

#include "funciones.h"

void menuprincipal(cli *);
void menucliente(cli *);
//void menuproductos();
//void menuempleado();



/* Localizado en funciones.h */
//void inicializar ();
//void confirmarcliente();
void insertarcliente(cli *);
//void insertarempleado();
void mostrarcliente(cli *);

//void menubuscar();
//void menubuscarp();


/*

void menuempleado()
{
	/*Menu principal del empleado*/
/*	int opc;
	
		do
		{
			system("cls");
			printf ("Menu Empleado: \n");
			printf ("1 - Eliminar \n");
			printf ("2 - Buscar \n");
			printf ("3 - Modificar Empleado \n");
			printf ("4 - Insertar Empleado \n");
			printf ("5 - Mostrar Tabla \n");
			printf ("6 - Salir al Menu Principal \n");
			scanf ("%d",&opc);
		} while ((opc<1) || (opc>6) ); 

			switch(opc)
		{
				case 1:
					eliminarempleado();
					break;

				case 2:
					system("cls");
					printf ("Indisponible...");
					getch();
					menuempleado();
					break;

				case 3:
					system("cls");
					printf ("Indisponible...");
					getch();
					menuempleado(); 
					break;

				case 4:
					insertarempleado();
					break;

				case 5:
					mostrarempleado(); 
					break;

				case 6:
					menuprincipal();
					break;
		}
}
*/
void menucliente(cli *pc)
{
	/*Menu principal del cliente*/
	int opc;


		do
		{
			system("cls");
			printf ("Menu Cliente: \n");
			printf ("1 - Eliminar \n");
			printf ("2 - Buscar \n");
			printf ("3 - Modificar Cliente \n");
			printf ("4 - Insertar Cliente \n");
			printf ("5 - Mostrar Tabla \n");
			printf ("6 - Salir al Menu Principal \n");
			scanf ("%d",&opc);
		} while ((opc<1) || (opc>6)); 

			switch(opc)
		{
				case 1:
					system("cls");
					printf ("Indisponible...");
					getch();
					menucliente(*pc);
				break;

				case 2:
					system("cls");
					printf ("Indisponible...");
					getch();
					menucliente(*pc);
				break;

				case 3:
					system("cls");
					printf ("Indisponible...");
					getch();
					menucliente(*pc);
				break;

				case 4:
					insertarcliente(*pc); 
					break; 

				case 5:
					mostrarcliente(*pc);
					break; 

				case 6:
					menuprincipal(*pc);
					break;
		}
}

/*void menuproductos()
{
	/* Menu de productos */
/*	int opc;
		do
		{
			system("cls");
			printf ("Menu Productos: \n");
			printf ("1 - Eliminar \n");
			printf ("2 - Buscar \n");
			printf ("3 - Modificar Producto \n");
			printf ("4 - Insertar Producto \n");
			printf ("5 - Mostrar Tabla \n");
			printf ("6 - Salir al Menu Principal \n");
			scanf ("%d",&opc);
		} while ((opc<1) || (opc>6)); 
			switch(opc)
		{
				case 1:
					system("cls");
					printf ("Indisponible...");
					getch();
					menuproductos();
					break; 

				case 2:
					system("cls");
					printf ("Indisponible...");
					getch();
					menuproductos();
					break;

				case 3:
					system("cls");
					printf ("Indisponible...");
					getch();
					menuproductos();
					break; 

				case 4:
					insertarproducto();
					break; 

				case 5:
					mostrarproducto();
					break; 

				case 6:
					menuprincipal(cli pc);
					break;
		}

}



void menubuscar()
{
	int opc;
		do
		{
			system("cls");
			printf ("Buscar por: \n");
			printf ("1 - Por ID \n");
			printf ("2 - Por nombre y apellido \n");
			printf ("3 - Salir al menu principal \n");
			scanf ("%d",&opc);
		} while ((opc<1) || (opc>3)); 

		switch(opc)
		{
			case 1:
			system("cls");
			printf ("Indisponible...");
			getch();
			menuprincipal(cli pc);
			break;

			case 2:
			system("cls");
			printf ("Indisponible...");
			getch();
			menuprincipal(cli pc); 
			break; 

			case 3:
			menuprincipal(cli pc);
			break;
		}
}

void menubuscarp()
{
	int opc;
		do
		{
			system("cls");
			printf ("Buscar por: \n");
			printf ("1 - Por Codigo \n");
			printf ("2 - Salir al menu principal \n");
			scanf ("%d",&opc);
		} while ((opc!=1) && (opc!=2)); 

		switch(opc)
		{
			case 1:
			system("cls");
			printf ("Indisponible...");
			getch();
			menuprincipal(cli pc); 
			break;

			case 2:
			menuprincipal(cli pc);
			break;
		}
	
}
*/
void menuprincipal(cli *pc)
{
	/* Esto es el menu principial del programa, el primer menu  al abrir el programa */

	int opc;

		do
		{
			system("cls");
			printf ("Hola! \n Bienvenidos a Deportes Rapidin! \n Menu principal: \n");
			printf ("1 - Empleado \n");
			printf ("2 - Cliente \n");
			printf ("3 - Producto \n");
			printf ("4 - Realizar Compra \n");
			printf ("5 - Salir \n");
			scanf ("%d",&opc);
		} while ((opc<1) || (opc>5)); 

		switch(opc)
		{
				case 1:
				//menuempleado();
				break;

				case 2:
				menucliente(*pc);
				break;

				case 3:
				//menuproductos();
				break;

				case 4:
				system("cls");
				printf ("Indisponible...");
				getch();
				//menuprincipal(); 
				break;

				case 5:
				exit(1);
				//guardarenfichero();
		}


}

Now the errors are the following:

Error 8 error C2371: 'inicializar' : redefinition; different basic types h:\***\funciones.h 141
Error 12 error C2084: function 'void inicializarporarchivo(cli *)' already has a body h:\***\funciones.h 13
Error 15 error C2371: 'inicializar' : redefinition; different basic types h:\***\funciones.h 141
Error 16 error C2084: function 'void insertarcliente(cli *)' already has a body h:\***\funciones.h 235
Error 19 error C2084: function 'void mostrarcliente(cli *)' already has a body h:\***\funciones.h 485
Error 20 error C2084: function 'void eliminarcliente(cli *)' already has a body h:\***\funciones.h 588
Error 21 error C2084: function 'int dniesvalido(char *,cli *)' already has a body h:\***\funciones.h 828
Error 23 error C2440: 'function' : cannot convert from 'cli' to 'cli *' h:\***\menus.h 100
Error 25 error C2440: 'function' : cannot convert from 'cli' to 'cli *' h:\***\menus.h 107
Error 27 error C2440: 'function' : cannot convert from 'cli' to 'cli *' h:\***\menus.h 114
Error 29 error C2440: 'function' : cannot convert from 'cli' to 'cli *' h:\***\menus.h 118
Error 31 error C2440: 'function' : cannot convert from 'cli' to 'cli *' h:\***\menus.h 122
Error 33 error C2440: 'function' : cannot convert from 'cli' to 'cli *' h:\***\menus.h 126
Error 35 error C2440: 'function' : cannot convert from 'cli' to 'cli *' h:\***\menus.h 275
Error 37 error C2275: 'c' : illegal use of this type as an expression h:\***\main.c 54
Error 38 error C2275: 'p' : illegal use of this type as an expression h:\***\main.c 55
Error 39 error C2275: 'e' : illegal use of this type as an expression h:\***\main.c 56
Error 40 error C2440: 'function' : cannot convert from 'cli' to 'cli *' h:\***\main.c 74


Ive tried passing the pointers every single possible way and still more and more errors popup. Ive given up. If someone could lend me a hand, thank you very much.

Recommended Answers

All 3 Replies

You don't put the function implementation code in *.h files then include the header file in two or more *.c files, or include it more than once in the same *.c file. That is what is causing the duplicate declaration errors. Put only the function prototypes in the header files and the implementation code in one *.c file, then link all object files that your compiler produced from the *.c files together to create the executable program.

I searched but I can't find where I redeclare my .h files in .c more than once...Ive looked several times but just can't see it.

The best way to prevent that problem is by using code guards in header files. Most header files suppied by compilers include them

// *.h

#ifndef _MYHEADER_H
#define _MYHEADER_H

// headef file stuff goes here

#endif // end of coode guard

The above only prevents header files being included in the same *.c file more than once. If you include your header file in two or more *.c files then attempt to link them you will get duplicate function declarations because of the reason I stated previously.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.