Foros del Web » Programación para mayores de 30 ;) » C/C++ »

no me suma los tiempos

Estas en el tema de no me suma los tiempos en el foro de C/C++ en Foros del Web. Hola, tengo un programa que entre otras operaciones me pide sumar todos los tiempos acumulados, pero no me los suma. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código C: Ver ...
  #1 (permalink)  
Antiguo 24/04/2010, 12:20
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 2 meses
Puntos: 0
no me suma los tiempos

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
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. #define LEE_CAR(c)\
  6.           c=getchar();\
  7.           while((c=='\n') || (c==' ') || (c=='\t'))\
  8.             c=getchar();
  9.  
  10. #define LEE_CAD(c,n) { int i=0;\
  11.                        c[i]=getchar();\
  12.                        while((c[i]=='\n') || (c[i]=='\t')) c[i]=getchar();\
  13.                        while((c[i]!='\n') && (i<(n-1))){ \
  14.                           i++;\
  15.                           c[i]=getchar(); }\
  16.                        c[i]='\0';}
  17.  
  18. typedef struct{
  19.          char num_dorsal[3];
  20.          char equipo[50];
  21.          char nom[50];
  22.          char ape[50];
  23.          char nacionalidad[50];
  24.          float tiempo_acum;
  25. }ciclista;
  26.  
  27. void alta_ciclista (FILE *);
  28. void modif_fich (FILE *);
  29. float total_tiempos (FILE *);
  30.  
  31. int main(){
  32.           char op;
  33.           FILE *pf;
  34.  
  35.           if((pf=fopen("ciclistas.dat", "ab+"))==NULL){
  36.               fprintf(stderr, "Error al abrir el fichero ciclistas.dat.\n");
  37.               exit(1);}
  38.  
  39.           do{
  40.              printf("a-->Alta\nb--> Buscar/Modificar ficha\nt--> Total tiempos\n");
  41.              LEE_CAR(op);
  42.  
  43.              switch(op){
  44.                   case 'a':
  45.                   case 'A': {alta_ciclista(pf); break;}
  46.                   case 'b':
  47.                   case 'B': {modif_fich(pf); break;}
  48.                   case 't':
  49.                   case 'T': {printf("\n%s %.2f\n","El total de los tiempos es:",total_tiempos(pf)); break;}
  50.              }
  51.           }while((op != 's') && (op != 'S'));
  52.           if(pf != NULL)
  53.             if(fclose(pf) == EOF)
  54.                fprintf(stderr, "Error al cerrar el fichero ciclistas.dat.\n");
  55.                exit(0);
  56. }
  57.  
  58. void alta_ciclista(FILE *d){
  59.           ciclista participante;
  60.  
  61.           printf("Número del dorsal: ");
  62.           scanf("%2s", participante.num_dorsal);
  63.           printf("Equipo: ");
  64.           LEE_CAD(participante.equipo, 50);
  65.           printf("Nombre: ");
  66.           LEE_CAD(participante.nom, 50);
  67.           printf("Apellido: ");
  68.           LEE_CAD(participante.ape, 50);  
  69.           printf("Nacionalidad: ");
  70.           LEE_CAD(participante.nacionalidad, 50);
  71.           printf("Tiempo acumulado: ");
  72.           scanf("%f", &participante.tiempo_acum);
  73.           fwrite(&participante, sizeof(participante), 1, d);
  74. }
  75.  
  76. void modif_fich(FILE *d){
  77.           char op;
  78.           char num_dorsal[3];
  79.           ciclista parti;
  80.           int comp;
  81.           FILE *aux;
  82.  
  83.           if((aux=fopen("ciclistas.dat", "wb+"))!=NULL){
  84.               printf("Número del dorsal a buscar/modificar: ");
  85.               scanf("%2s", num_dorsal);
  86.               rewind(d);
  87.               fread(&parti, sizeof(parti), 1, d);
  88.               comp=strcmp(parti.num_dorsal, num_dorsal);
  89.               while((comp != 0) && (!feof(d))){
  90.                   fwrite(&parti, sizeof(parti), 1, aux);
  91.                   fread(&parti, sizeof(parti), 1, d);
  92.                   comp=strcmp(parti.num_dorsal, num_dorsal);}
  93.               if(comp == 0){
  94.                  printf("Ciclista encontrado:\n");
  95.                  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);
  96.                  printf("Modificar tiempo (s/n)?");
  97.                  LEE_CAR(op);
  98.                  if((op=='s') || (op=='S')){
  99.                     printf("Tiempo acumulado: ");
  100.                     scanf("%f", &parti.tiempo_acum);
  101.                     fwrite(&parti, sizeof(parti), 1, aux);
  102.                     fread(&parti, sizeof(parti), 1, d);
  103.                      while(!feof(d)){
  104.                          fwrite(&parti, sizeof(parti), 1, aux);
  105.                          fread(&parti, sizeof(parti), 1, d);}
  106.                      if(fclose(aux) == EOF)
  107.                         fprintf(stderr, "Error al cerrar el fichero ciclistas.dat.\n");        
  108.                      remove("ciclistas.dat");
  109.                      rename("ciclistas.aux", "ciclistas.dat");
  110.                      if((d=fopen("ciclistas.dat", "ab+"))==NULL){
  111.                         fprintf(stderr, "Error al abrir el fichero ciclistas.dat.\n");
  112.                         exit(2);}
  113.                  }
  114.                  else{
  115.                    if(fclose(aux) == EOF)
  116.                      fprintf(stderr, "Error al cerrar el fichero ciclistas.aux.\n");
  117.                  }
  118.               }  
  119.               else{
  120.                  printf("Ciclista no encontrado.\n");
  121.                  if(fclose(aux) == EOF)
  122.                    fprintf(stderr, "Error al cerrar el fichero ciclistas.aux.\n");
  123.               }  
  124.           }    
  125. }
  126.  
  127. float total_tiempos(FILE *d){
  128.            ciclista parti;
  129.            float total=0.0;
  130.            rewind(d);
  131.            fread(&parti,sizeof(parti),1,d);
  132.            while(!feof(d)){
  133.               total+=parti.tiempo_acum;
  134.               fread(&parti,sizeof(parti),1,d);
  135.            }
  136. }

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
  #2 (permalink)  
Antiguo 24/04/2010, 12:47
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: no me suma los tiempos

Ya lo he solucionado.

Etiquetas: suma
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:41.