From 2fb5d110749a0b268679e82347cd0c2affef5621 Mon Sep 17 00:00:00 2001 From: yoboujon Date: Sun, 27 Nov 2022 23:53:28 +0100 Subject: [PATCH] =?UTF-8?q?Debug=20complet,=20ne=20lit=20plus=20dans=20un?= =?UTF-8?q?=20string,=20affichage=20du=20nombre=20de=20personnes=20dop?= =?UTF-8?q?=C3=A9es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Makefile | 2 +- header/liste.h | 6 +-- header/readfile.h | 5 ++- src/liste.c | 27 +++++++------ src/readfile.c | 101 ++++++++++++++++++++++++++++++++++++++-------- 5 files changed, 106 insertions(+), 35 deletions(-) diff --git a/Makefile b/Makefile index b7aea77..3bd3e1a 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ SRC=src/ EXEC=main CLEAN=clean -all: clean $(EXEC) exec +all: $(EXEC) exec main: liste.o coureur.o readfile.o $(CC) $(CFLAGS) -o $@ $^ diff --git a/header/liste.h b/header/liste.h index f521596..102d061 100644 --- a/header/liste.h +++ b/header/liste.h @@ -4,7 +4,7 @@ #include "coureur.h" //inclure le fichier "coureur.h" qui contien les libs et la structure coureur #define TEMPSMAX 300 #define TEMPSMIN 80 -#define TEMPSDOP 70 +#define TEMPSDOP 78 struct element{ //definition de la structure qui element qui sera encaspule/chaine coureur * coureurActuel; //"contient" l'adresse d'une structure coureur @@ -26,9 +26,9 @@ void allerDebut(liste * l); //mettre le poit void allerFin(liste * l); //mettre le poiteur courant sur l'element de fin d'une liste void avancer(liste * l); //mettre le poiteur courant sur l'element suivant de la liste dans la qu'elle qu'il pointe coureur * coureurCourant(liste * l); //rien a foutre ici -void effacerCoureur(liste * listeActuel,coureur * coureurSuppr);//enleve un element d'une liste a partir de l'adresse d'un courreur, sans briser le chainage +bool effacerCoureur(liste * listeActuel,coureur * coureurSuppr);//enleve un element d'une liste a partir de l'adresse d'un courreur, sans briser le chainage bool doesCoureurExist(liste* l,coureur * c); -void effacerListe(liste * destination, liste * source); +int effacerListe(liste * destination, liste * source); int tailleListe(liste l); //retourne le nombre d'elements chaine d'une liste coureur * getCoureur(liste l,int nb); //retourne le courreur contenue dans l'element nb d'une liste (on considere un element 0) void invertCoureur(liste * l,int nb); //inverse l'element nb et nb+1 dans une liste (on considere un element 0) diff --git a/header/readfile.h b/header/readfile.h index 4e3653f..d6362be 100644 --- a/header/readfile.h +++ b/header/readfile.h @@ -6,11 +6,12 @@ #include #include "liste.h" -int getNbLines(FILE * readFile); +int getNbLines(void); int getFileSize(FILE * readFile); -void getStringFromFile(FILE * readFile,int nbLines,char * returnString,int * size); +liste getStringFromFile(int nbLines,int * size, int * stepsNb,int * teamsNb); char * getLine(char * string,int line); liste string2Liste(char * string,int nbLines); void string2Coureur(char * string,char * nom, char * prenom, int * dossard); +void deleteLineFeed(char * string); void printHexString(char * string); #endif \ No newline at end of file diff --git a/src/liste.c b/src/liste.c index 7793f38..4749435 100644 --- a/src/liste.c +++ b/src/liste.c @@ -5,13 +5,8 @@ int main(void) { int size, stepsNb, teamsNb, listeTaille, dopageCount=0; srand(time(NULL)); - FILE * f=fopen ("fichier_coureurs.txt","r"); - char * fileString = (char *)(malloc(getFileSize(f)*sizeof(char))); - int fileLines = getNbLines(f); - getStringFromFile(f,fileLines,fileString,&size); - stepsNb = atoi(getLine(fileString,1)); - teamsNb = atoi(getLine(fileString,2)); - liste l = string2Liste(fileString,fileLines); + int fileLines = getNbLines(); + liste l = getStringFromFile(fileLines,&size,&stepsNb,&teamsNb); liste dopageList = initListe(); listeTaille = tailleListe(l); @@ -27,7 +22,6 @@ int main(void) if(temptemps < TEMPSMIN) { ajoutListe(&dopageList,coureurTemp); - dopageCount++; } } allerDebut(&l); @@ -35,10 +29,11 @@ int main(void) allerDebut(&l); printf(" --- AVANT : ---\n"); printlist(l); - effacerListe(&l,&dopageList); + dopageCount=effacerListe(&l,&dopageList); printf("\n --- APRES : ---\n"); triListe(&l,tailleListe(l)); printlist(l); + printf("\n --- NOMBRE DE PERSONNES DOPEES : %d ---\n",dopageCount); return 0; } @@ -171,11 +166,11 @@ coureur * coureurCourant(liste * l) * @param listeActuel Liste ou l'on suppr un element * @param coureurSuppr le coureur qui doit etre dans l'element pour le supprimer */ -void effacerCoureur(liste * listeActuel,coureur * coureurSuppr) +bool effacerCoureur(liste * listeActuel,coureur * coureurSuppr) { if(!doesCoureurExist(listeActuel,coureurSuppr)) { - return; + return false; } struct element *eParcours =listeActuel->debut; struct element * ePrevious; @@ -194,6 +189,7 @@ void effacerCoureur(liste * listeActuel,coureur * coureurSuppr) ePrevious->suiv=eParcours->suiv; free(eParcours); } + return true; } bool doesCoureurExist(liste* l,coureur * c) @@ -210,14 +206,19 @@ bool doesCoureurExist(liste* l,coureur * c) return false; } -void effacerListe(liste * destination, liste * source) +int effacerListe(liste * destination, liste * source) { + int returnValue=0; struct element * eCourant = source->debut; while(eCourant->suiv != source->fin->suiv) { - effacerCoureur(destination,eCourant->coureurActuel); + if(effacerCoureur(destination,eCourant->coureurActuel)) + { + returnValue++; + } eCourant=eCourant->suiv; } + return returnValue; } /** diff --git a/src/readfile.c b/src/readfile.c index ac64328..956e933 100644 --- a/src/readfile.c +++ b/src/readfile.c @@ -7,9 +7,15 @@ * @param readFile le fichier en question * @return int nombre de ligne */ -int getNbLines(FILE * readFile) +int getNbLines(void) { int c,count=0; + FILE * readFile=fopen ("fichier_coureurs.txt","r"); + if (readFile == NULL) + { + printf("Le fichier ne peut pas être ouvert!\n"); + return -1; + } do{ c=getc(readFile); if(c == 0xa) @@ -17,31 +23,72 @@ int getNbLines(FILE * readFile) count++; } }while(c!=0xffffffff); + fclose(readFile); return count+1; } /** - * @brief Converti les caractères d'un fichier dans un string pour pouvoir - * le manipuler plus simplement + * @brief Converti les caractères d'un fichier dans la liste de coureur. * - * @param readFile le fichier à lire - * @param nbLines son nombre de ligne - * @param returnString une chaîne de caractère vide à modifier + * @param nbLines nombre de ligne du fichier qui va être lu * @param size renvoie la taille de la chaîne de caractère + * @param stepsNb int * renvoi le nombre d'étapes + * @param teamsNb int * renvoi le nombre d'équipes + * @return liste de coureurs */ -void getStringFromFile(FILE * readFile,int nbLines,char * returnString,int * size) +liste getStringFromFile(int nbLines,int * size, int * stepsNb,int * teamsNb) { - int i; - char temp[MAXLINE]; + liste l = initListe(); + FILE * readFile=fopen("fichier_coureurs.txt","r"); + if (readFile == NULL) + { + printf("Le fichier ne peut pas être ouvert!\n"); + return l; + } + int i,j=0; + char * team = (char *)(malloc(MAXLINE*sizeof(char))); + char *temp =(char *)(malloc(MAXLINE*(sizeof(char)))); *size=0; - strcpy(returnString,""); fseek(readFile,0,0); for(i=0;i5) + { + j=0; + } + free(nom); + free(prenom); + } *size+=strlen(temp); - strcat(returnString,temp); } + fclose(readFile); + return l; } /** @@ -60,7 +107,8 @@ int getFileSize(FILE * readFile) } /** - * @brief Debug uniquement : récupère une ligne, non optimisé donc inutilisable + * @brief /!\/!\/!\ Debug uniquement /!\/!\/!\ : + * récupère une ligne, non optimisé donc inutilisable * * @param string la chaîne de caractère à analyser * @param line int la ligne à récupérer @@ -87,7 +135,8 @@ char * getLine(char * string,int line) } /** - * @brief Renvoi une liste à partir d'une chaîne de caractère contenant + * @brief /!\/!\/!\ INUTILISE CAR OBSELETE /!\/!\/!\ : + * Renvoi une liste à partir d'une chaîne de caractère contenant * les équipes ainsi que les coureurs avec leur nom, leur prénom et numéro de dossard * * @param string chaîne de caractère @@ -138,7 +187,7 @@ void string2Coureur(char * string,char * nom, char * prenom, int * dossard) { int i=0,j=0,k=0; char * temp = (char *)(malloc(MAXLINE*sizeof(char))); - while(string[j]!='\0'){ + while(string[j]!='\0' && string[j]!='\n'){ k=0; while(string[j] != ',' && string[j]!='\0'){ temp[k] = string[j]; @@ -166,7 +215,27 @@ void string2Coureur(char * string,char * nom, char * prenom, int * dossard) } /** - * @brief Debug uniquement, permet d'observer les valeurs de chaque caractère. + * @brief Supprime les retours à la ligne dans les chaînes de caractère. + * Attention ! les remplace par le caractère signifiant la fin de la chaîne. + * + * @param string chaîne de caractère + */ +void deleteLineFeed(char * string) +{ + int i=0; + while(string[i]!='\0') + { + if(string[i]=='\n') + { + string[i]='\0'; + } + i++; + } +} + +/** + * @brief /!\/!\/!\ Debug uniquement /!\/!\/!\ : + * Permet d'observer les valeurs de chaque caractère. * la taille n'est pas demandée pour observer au delà de l'espace mémoire donné * * @param string un tableau de caractère