| jares88 
								
								 Desconectado 
								Mensajes: 1
								
								
								
								
								
								   | 
 
Hola alguien puede mirar este programa para ver los errores de codificacion que tiene que no soy capaz de solucionar, el error tiene que estar por donde esta señalado.gracias
 
 #include <stdio.h>
 #include <conio.h>
 
 #define MAXPER 100
 #define IMPED 1200
 #define LIMING 30000
 #define DIVIN 120000
 #define FIN "XXXX"
 
 /* se define la estructura del registro que mas adelante se utilizara*/
 typedef struct
 {
 char nom[10],ape[10];
 float ing;
 }tPersona;
 
 /*se definen los modulos que se van a ulilizar en el modulo principal*/
 void recuperarPers(char[],tPersona[],int*);
 int leerEntero(int,int);
 void aniadirPers(tPersona[],int*,int);
 void mostrarPers(tPersona[],int);
 void eliminarPers(tPersona[],int*);
 void calcImpuestos(tPersona[],int);
 void grabarPers(char [],tPersona[],int);
 
 
 void main()
 {
 tPersona pers[MAXPER];
 int np,opc;
 clrscr();
 /*llamada al modulo recuperarPers*/
 recuperarPers("PERSONAS.DAT",pers,&np);
 
 do
 {
 printf("1. A¤adir personas\n2. Mostrar personas\n3. Eliminar una persona\n4. Impuestos\n5. Salir\nIntroduce una opci¢n: ");
 /*llamada al modulo leerEntero que devuelve un numero del 1 al 5 que se le asocia a la variable opc*/
 opc=leerEntero(1,5);
 switch(opc)
 {
 case 1:
 {
 /*llamada al modulo aniadirPers*/
 aniadirPers(pers,&np,MAXPER);
 /*llamada al modulo grabarPers*/
 grabarPers("PERSONAS.DAT",pers,np);
 }
 break;
 case 2:
 {
 /*llamada al modulo mostrarPers*/
 mostrarPers(pers,np);
 }
 break;
 case 3:
 {
 /*llamada al modulo eliminarPers*/
 eliminarPers(pers,&np);
 /*llamada al modulo grabarPers*/
 grabarPers("PERSONAS.DAT",pers,np);
 }
 break;
 case 4:
 {
 /*llamada al modulo calcImpuestos*/
 calcImpuestos(pers,np);
 }
 break;
 }
 }
 while(opc!=5);
 getch();
 }
 /* cuerpo del modulo recuperarPers(lee el numero de personas y la lista de personas)*/
 void recuperarPers(char PERSONA.DAT[],tPersona pers[],int *pnp)
 {
 FILE *fpers;
 /*se abre el archivo para saber si ya hay algo escrito en el*/
 fpers=fopen("PERSONAS.DAT","r");
 if (fpers==NULL)
 {
 *pnp=0;
 }
 else
 {
 /*si no esta vacio el archivo lee el numero de personas y la lista de personas y las lleva al modulo principal*/
 fread(*pnp,sizeof(int),1,fpers);
 fread(pers,sizeof(tPersona),*pnp,fPers);
 fclose(fPers);
 }
 }
 
 
 /* cuerpo del modulo leerEntero(limita el intervalo de numero que el usuario puede escoger*/
 int leerEntero(int MINIMO,int MAXIMO)
 {
 int n;
 printf("\nIntroduce una opci¢n: ");
 scanf("%d",&n);
 while(n<MINIMO||n>MAXIMO)
 {
 printf("\nError, debe estar en el intervalo [%d,%d]: ",MINIMO,MAXIMO);
 scanf("%d",&n);
 }
 /*devuelve "n" al modulo principal*/
 return(n);
 }
 
 #define MAXPER 100
 #define FIN "XXXX"
 /* se define el modulo que va a ser ulilizado dentro del modulo aniadirPers*/
 float leerNoNegativo()
 /*cuerpo del modulo aniadirPers(a¤ade personas a la lista)*/
 void aniadirPers(tPersona pers[],int *pnp,int MAXPER)
 {
 char apellido[];
 /*solo se podra a¤adir una persona mas si la lista no esta llena*/
 if(*pnp<MAXPER)
 {
 printf("PERSONA %d:",*pnp);
 printf("\nApellido: ");
 /* introducir el apellido a la lista*/
 flushall();
 gets(apellido);
 strupr(apellido);
 /* si el apellido es = a FIN no se a¤ade a la lista y se sale de ella*/
 while(apellido!=FIN && *pnp<=MAXPER)
 {
 /*se le asocia el apellido introducido por el usuario al registro definido anteriormente*/
 pers[*pnp].ape=apellido;
 printf("\nNombre:");
 /*se introduce el nombre*/
 flushall();
 gets(pers[*pnp].nom);
 strupr(pers[*pnp].nom);
 printf("\nIngresos:");
 /*se llama al modulo leerNoNegativo y se asocia a la parte de ingresos del registro*/
 pers[*pnp].ing=leerNoNegativo();
 *pnp=*pnp+1;
 /* te vuelve a pedir otro apellido y empezar el ciclo solo si no se supera el maximo de personas*/
 if(*pnp<MAXPER)
 {
 printf("\nPersona %d:",*pnp);
 printf("\nApellido: ");
 flushall();
 gets(apellido);
 strupr(apellido);
 }
 else
 {
 printf("\nSe ha alcanzado el n£mero m ximo de personas.");
 }
 }
 else
 {
 printf("\nSe ha alcanzado el n£mero m ximo de personas.");
 }
 }
 /* cuerpo del modulo leerNoNegativo( lee el numero si es negativo te pide otro asta que sea positivo)*/
 float leerNoNegativo()
 {
 float n;
 scanf("%f",&n);
 while(n<0)
 {
 printf("\nError: el n£mero ha de ser mayor o igual que cero.");
 scanf("%f",&n);
 }
 return(n);
 }
 /* cuerpo del modulo mostrarPers(muestra por pantalla la lista de personas)*/
 void mostrarPers(tPersona pers[],int np)
 {
 int iP;
 clrscr();
 printf("Id.  APELLIDO   NOMBRE     INGRESOS\n===================================");
 for(iP=0;iP<=np-1;iP=iP+1)
 {
 /*muestra por pantalla lo que esta almacenado en el registro*/
 printf("\n  %2d. %11s%11s%f.2",iP+1,pers[iP].ape,pers[iP].nom,pers[iP].ing);
 if((iP+1%20)=0)
 {
 getch();
 clrscr();
 }
 }
 }
 /* se define el modulo leerEntero que sera utilizado dentro del modulo eliminarPers*/
 int leerEntero(int,int);
 
 /*cuerpo del modulo eliminarPers(sirve para eliminar nombres de la lista y sus datos asociados en el registro)*/
 void eliminarPers(tPersona pers[],int *pnp)
 {
 int nOrd,iP;
 printf("\nIntroduce el n£mero de orden de la persona a eliminar (0-cancelar): ");
 nOrd=leerEntero(0,*pnp);
 /* si el nOrd(numero de orden en la lista) es distinto de 0 se elimina el nombre que este en ese numero de orden*/
 if(nOrd!=0)
 {
 for(iP=nOrd;iP<=*pnp,iP=iP+1)
 {
 /*la persona de esa posicion toma el nombre del siguiente y se borra el seleccionado*/
 pers[iP-1]=pers[iP];
 }
 *pnp=*pnp-1;
 }
 }
 #define IMPED 1200
 #define LIMING 30000
 #define DIVIN 120000
 
 /*cuerpo del modulo calcImpuestos(calcula los impuestos que se utilizaran para cada familia)*/
 void calcImpuestos(tPersona pers[],int np)
 {
 int iP,fin,nDed;
 float ingFam,ingAj,impFam,porc;
 if(np>0)
 {
 clrscr();
 printf("FAMILIA     IMPUESTOS\n=====================)");
 iP=0;
 do
 {
 /*se igualan las variables a 0*/
 fin=0;
 nDed=0;
 ingFam=0;
 do
 {
 /*si los ingresos de una persona son nulos se a¤ade una deduccion a la familia*/
 if(pers[iP].ing=0)
 {
 nDed=nDed+1;
 }
 /* si tiene algun ingreso se le suma al ingreso familiar*/
 else
 {
 ingFam=ingFam+pers[iP].ing;
 }
 if(iP=np-1)
 {
 /* se iguala a 1 la variable fin si ya no hay mas personas sobre las que calcular los impuestos para salir del bucle*/
 fin=1;
 }
 /* si no es la ultima persnoa se compara el siguiente apellido para ver si es de la misma familia*/
 else
 {
 if(pers[iP].ape!=pers[iP+1].ape
 {
 fin=1;
 }
 /* se pasa al siguiente nombre de la lista*/
 iP=iP+1;
 }
 /*cuando se termina con una familia (fin=1) se procede a hacer los calculos */
 while(fin==1);
 /*ingreso ajustado teniendo en cuenta el numero de deducciones de la familia*/
 ingAj=ingFam-IMPDED*nDed;
 if(ingAj>0)
 {
 /*se comparan los ingresos ajustados con el limite de ingresos para hacer los calculos dependiendo de ello*/
 if(ingAj>LIMING)
 {
 porc=(LIMING/DIVING);
 }
 else
 {
 porc=(ingAj/DIVING);
 }
 impFam=porc*ingAj;
 }
 else
 {
 impFam=0;
 }
 }
 while(iP<=np-1);
 }
 }
 /*cuerpo del modulo grabarPers(graba los cambios que se producen)*/
 void grabarPers(char nomArch[],tPersona pers [],int np)
 {
 FILE *Fpers;
 /*se abre el archivo en modo escritura*/
 fPers=fopen(nomArch"w");
 /*se guarda el tama¤o y la lista*/
 fwrite(&np,sizeof(int),1,fPers);
 fwrite(pers,sizeof(tPersonas),np,fPers);
 /*se cierra el archivo*/
 fclose(fPers);
 }
 
 |