CICLO INFINITO

Iniciado por cristianscarafia, 25 Septiembre 2021, 01:16 AM

0 Miembros y 1 Visitante están viendo este tema.

cristianscarafia

Buenas, no estaria detectando por que este programa me genera un ciclo infinito, desde ya muchas gracias.


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define CODDEPO 6
#define NOMDEPO 15

typedef struct{
   char coddepor[CODDEPO];
   unsigned int tiempo;
}competencia;
typedef struct{
   char coddepor[CODDEPO];
   char nomdepor[NOMDEPO];
   unsigned int tiempo;
}record;

void cargador();
void cargatabla(record tablarec[],int *n);
void procesa();
int buscaindice(record tablarec[],int n,char depor_act[]);

int main()
{
   record tablarec[20];
   int n;
   cargador();
   cargatabla(tablarec,&n);
   procesa(tablarec,n);
   return 0;
}
void cargador(){

   competencia compe;
   record rec;

   FILE *competiciontxt, *competicionbin;
   FILE *recordstxt,*recordsbin;

   competiciontxt = fopen("competicion.txt","r");
   competicionbin = fopen("competicion.dat","wb");
   recordstxt = fopen("records.txt","r");
   recordsbin = fopen("records.dat","wb");

   if(competiciontxt == NULL){
       printf("El archivo competicion no existe.");
   }else{
       while(fscanf(competiciontxt,"%s %d",compe.coddepor,&compe.tiempo) == 2){
           fwrite(&compe,sizeof(competencia),1,competicionbin);
       }
       fclose(competicionbin);
       fclose(competiciontxt);
   }
   if(recordstxt == NULL){
       printf("El archivo records no existe.");
   }else{
       while(fscanf(recordstxt,"%s %s %d",rec.coddepor,rec.nomdepor,&rec.tiempo) == 3){
           fwrite(&rec,sizeof(record),1,recordsbin);

       }
       fclose(recordsbin);
       fclose(recordstxt);
   }
}
void cargatabla(record tablarec[],int *n){
   FILE *arch;
   arch = fopen ("records.dat","rb");
   (*n) = 0;
   if (arch == NULL){
       printf("Ocurrio un error con la lectura del archivo records.dat");
   }else{
       fread(&tablarec[*n],sizeof(record),1,arch);
       while(!feof(arch)){
           (*n)++;
           fread(&tablarec[*n],sizeof(record),1,arch);
       }
       fclose(arch);
   }
}
void procesa(record tablarec[],int n){
   competencia compe;
   int cant_comp,cant_sup,sum_t,indice;
   float t_prom;
   char depor_act[CODDEPO];
   FILE *competicion;

   competicion = fopen("competicion.dat","rb");

   if (competicion == NULL){
       printf("Ocurrio un error con la lectura del archivo competicion.");
   }else{
       printf("DEPORTE \t CANT.COMPETIDORES \t CANT. SUPERO EL RECORD \t TIEMPO PROMEDIO \n");
       fread(&compe,sizeof(competencia),1,competicion);
       while(!feof(competicion)){
           cant_comp=0;
           cant_sup=0;
           t_prom=0;
           sum_t=0;
           strcpy(depor_act,compe.coddepor);
           indice = buscaindice(tablarec,n,depor_act);
           while(!feof(competicion) && !strcmp(depor_act,compe.coddepor) ){
               if (compe.tiempo > tablarec[indice].tiempo){
                   cant_sup++;
               }
               sum_t+=compe.tiempo;
               cant_comp++;
               fread(&compe,sizeof(competencia),1,competicion);
           }
           t_prom=(sum_t/(float)cant_comp);
           printf("%s \t %d \t %d \t %5.2f \n",depor_act,cant_comp,cant_sup,t_prom);
       }
       fclose(competicion);
   }
}
int buscaindice(record tablarec[],int n,char depor_act[]){
   int i,indice;
   indice=0;

   for (i=0;i<n;i++){
       if(strcpy(depor_act,tablarec[i].coddepor)){
           indice=i;
       }
   }
   return indice;
}



ARCHIVO TXT COMPETICION:

bicic 5
bicic 7
bicic 6
bicic 5
carre 10
carre 15
carre 9
carre 16
carre 12
natac 10
natac 16
natac 20
natac 5
patin 4
patin 7
patin 6
patin 8


ARCHIVO TXT RECORDS

carre Carrera 10
patin Patin 4
bicic Bicicleta 7
natac Natacion 18




MOD: El código debe ir entre etiquetas de Código GeSHi

Tachikomaia

¿No puedes decir en qué ciclo se da el infinito?

MAFUS

En buscaindice en vez de ser strcpy ¿no debería ser strcmp?