Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/06/2010, 07:40
minette1988
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 2 meses
Puntos: 0
imprimir la deuda mayor de un cliente

Hola, tengo el siguiente ejercicio que pide los datos de los clientes y quiero hacer un subprograma que me busque la deuda mayor y la muestre por pantalla. Lo he intentado, pero no me sale, me da errores.

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

#define LEE_CHAR(c)\
c=getchar();\
while((c=='\n') || (c==' ') || (c=='\t'))\
c=getchar();

#define LEE_CAD(c,n) { int i=0; \
c[i]=getchar();\
while((c[i]=='\n') || (c[i]=='\t')) c[i]=getchar();\
while ((c[i]!='\n') && (i < (n-1))){ \
i++;\
c[i]=getchar(); }\
c[i]='\0'; }

#define TAM_NOMBRE 100
#define TAM_DIR 100
#define NUM_CLIENTES 10

struct cliente{
char nombre[TAM_NOMBRE];
char direccion[TAM_DIR];
double deuda;
};
int main(){
void crear_fich();
void deuda_mayor();
char sel;
FILE *pf; //Puntero a fichero

/* Abre el fichero para trabajar con él en Lectura / Escritura */
if((pf = fopen("datos.dat", "wb+")) == NULL) {/*"rb+"*/
/* Si no existe, ejecuta el módulo que lo cree */
crear_fich();
/* Una vez creado lo habre en lectura/escritura */
if((pf = fopen("datos.dat", "rb+")) == NULL) {
perror("Fichero no accesible");
exit(1);
}
}

do{
printf("MENÚ\n----\n");

printf("1). Dar de alta un cliente.\n");
printf("2). Mostrar la deuda mayor.\n");
printf("3). salir y eliminar.\n");
printf("0). Salir\n\nOpción(0-2): ");

do{
LEE_CHAR(sel);
}while( (sel<'0') || (sel>'3') );

switch(sel){
case '1':{
crear_fich(pf);
/* Una vez creado lo abre en lectura/escritura */
if((pf = fopen("datos.dat", "rb+")) == NULL) {
perror("Fichero no accesible");
exit(2);
}
break;}
case '2':{ deuda_mayor(pf);
break;}
case '3':{ fclose(pf); pf=NULL; remove("datos.dat"); sel= '0';
break;}
} //switch
}while(sel!='0');

exit(0);
}//main()
////////////////////////////////////////
void crear_fich(FILE* pf) {
struct cliente cli[NUM_CLIENTES];

char otro;

if((pf = fopen("datos.dat", "ab")) == NULL) {
perror("Al crear el fichero de datos");
exit(2);
}

/* Lectura de los ciclistas */
do {

cli.deuda = 0.0;
printf("Nombre: "); LEE_CAD(cli.nombre, TAM_NOMBRE);
printf("Dirección: "); LEE_CAD(cli.direccion, TAM_DIR);
printf("Deuda: "); scanf("%lf", &cli.deuda);
/*Escribe el cliente en el fichero */
fwrite(&cli, sizeof(struct cliente), 1, pf);
printf("¿Otro? (s/n) ");
LEE_CHAR(otro);
}while((otro=='s') || (otro=='S'));
if(fclose(pf) == EOF){
printf("Error al cerrar el fichero, compruebe si hay información.\n");
exit(3);
}
} /* crear_fich()*/
//////////////////////////////////
void deuda_mayor(FILE *pf){
struct cliente cli[NUM_CLIENTES];

int deuda_mayor=0;

if(cli.deuda > cli[deuda_mayor].deuda);
deuda_mayor=cli.deuda;

printf("%s %.2lf\n", cli[deuda_mayor].nombre,cli[deuda_mayor].deuda);

}