Hola, tengo un programa que entre otras operaciones me pide sumar todos los tiempos acumulados, pero no me los suma.
Código C:
Ver original#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define LEE_CAR(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';}
typedef struct{
char num_dorsal[3];
char equipo[50];
char nom[50];
char ape[50];
char nacionalidad[50];
float tiempo_acum;
}ciclista;
void alta_ciclista (FILE *);
void modif_fich (FILE *);
float total_tiempos (FILE *);
int main(){
char op;
FILE *pf;
if((pf
=fopen("ciclistas.dat", "ab+"))==NULL
){ fprintf(stderr
, "Error al abrir el fichero ciclistas.dat.\n");
do{
printf("a-->Alta\nb--> Buscar/Modificar ficha\nt--> Total tiempos\n"); LEE_CAR(op);
switch(op){
case 'a':
case 'A': {alta_ciclista(pf); break;}
case 'b':
case 'B': {modif_fich(pf); break;}
case 't':
case 'T': {printf("\n%s %.2f\n","El total de los tiempos es:",total_tiempos
(pf
)); break;} }
}while((op != 's') && (op != 'S'));
if(pf != NULL)
fprintf(stderr
, "Error al cerrar el fichero ciclistas.dat.\n"); }
void alta_ciclista(FILE *d){
ciclista participante;
printf("Número del dorsal: "); scanf("%2s", participante.
num_dorsal); LEE_CAD(participante.equipo, 50);
LEE_CAD(participante.nom, 50);
LEE_CAD(participante.ape, 50);
LEE_CAD(participante.nacionalidad, 50);
scanf("%f", &participante.
tiempo_acum); fwrite(&participante
, sizeof(participante
), 1, d
); }
void modif_fich(FILE *d){
char op;
char num_dorsal[3];
ciclista parti;
int comp;
FILE *aux;
if((aux
=fopen("ciclistas.dat", "wb+"))!=NULL
){ printf("Número del dorsal a buscar/modificar: "); scanf("%2s", num_dorsal
); fread(&parti
, sizeof(parti
), 1, d
); comp
=strcmp(parti.
num_dorsal, num_dorsal
); while((comp
!= 0) && (!feof(d
))){ fwrite(&parti
, sizeof(parti
), 1, aux
); fread(&parti
, sizeof(parti
), 1, d
); comp
=strcmp(parti.
num_dorsal, num_dorsal
);} if(comp == 0){
printf("Ciclista encontrado:\n"); printf("%s\n%s\n%s\n%s\n%s\n%.2f\n", parti.
num_dorsal, parti.
equipo, parti.
nom, parti.
ape, parti.
nacionalidad, parti.
tiempo_acum); printf("Modificar tiempo (s/n)?"); LEE_CAR(op);
if((op=='s') || (op=='S')){
scanf("%f", &parti.
tiempo_acum); fwrite(&parti
, sizeof(parti
), 1, aux
); fread(&parti
, sizeof(parti
), 1, d
); fwrite(&parti
, sizeof(parti
), 1, aux
); fread(&parti
, sizeof(parti
), 1, d
);} fprintf(stderr
, "Error al cerrar el fichero ciclistas.dat.\n"); rename("ciclistas.aux", "ciclistas.dat"); if((d
=fopen("ciclistas.dat", "ab+"))==NULL
){ fprintf(stderr
, "Error al abrir el fichero ciclistas.dat.\n"); }
else{
fprintf(stderr
, "Error al cerrar el fichero ciclistas.aux.\n"); }
}
else{
printf("Ciclista no encontrado.\n"); fprintf(stderr
, "Error al cerrar el fichero ciclistas.aux.\n"); }
}
}
float total_tiempos(FILE *d){
ciclista parti;
float total=0.0;
fread(&parti
,sizeof(parti
),1,d
); total+=parti.tiempo_acum;
fread(&parti
,sizeof(parti
),1,d
); }
}
Cuando lo compilo y le doy a la t para que me saque la suma de los tiempos me sale lo siguiente: El total de los tiempos es: nan