Perdonad, vuelvo a publicar el código con las modificaciones oprtunas. Cuando lo compilo no me saca la deuda más alta sino que me da fallos.
Código C:
Ver original#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
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"); }
}
do{
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"); }
break;}
case '2':{ deuda_mayor(pf);
break;}
case '3':{ fclose(pf
); pf
=NULL
; remove("datos.dat"); sel
= '0'; break;}
} //switch
}while(sel!='0');
}//main()
////////////////////////////////////////
void crear_fich(FILE* pf) {
struct cliente cli;
char otro;
if((pf
= fopen("datos.dat", "ab")) == NULL
) { perror("Al crear el fichero de datos"); }
/* 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
); /*Escribe el cliente en el fichero */
fwrite(&cli
, sizeof(struct cliente
), 1, pf
); LEE_CHAR(otro);
}while((otro=='s') || (otro=='S'));
printf("Error al cerrar el fichero, compruebe si hay información.\n"); }
} /* crear_fich()*/
//////////////////////////////////
void deuda_mayor(FILE *pf){
struct cliente cli;
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);
}
Los fallos de compilación son estos:
deuda_mayor.c: En la función ‘deuda_mayor’:
deuda_mayor.c:107: error: el valor indicado por el subíndice no es ni matriz ni puntero
deuda_mayor.c:110: error: el valor indicado por el subíndice no es ni matriz ni puntero
deuda_mayor.c:110: error: el valor indicado por el subíndice no es ni matriz ni puntero
Podéis decirme cómo puedo sacar la deuda más alta, de una forma sencilla, por favor. Mañana tengo examen.