Debug complet, ne lit plus dans un string, affichage du nombre de personnes dopées

This commit is contained in:
Yohan Boujon 2022-11-27 23:53:28 +01:00
parent 2d6c53d2d6
commit 2fb5d11074
5 changed files with 106 additions and 35 deletions

View file

@ -4,7 +4,7 @@ SRC=src/
EXEC=main EXEC=main
CLEAN=clean CLEAN=clean
all: clean $(EXEC) exec all: $(EXEC) exec
main: liste.o coureur.o readfile.o main: liste.o coureur.o readfile.o
$(CC) $(CFLAGS) -o $@ $^ $(CC) $(CFLAGS) -o $@ $^

View file

@ -4,7 +4,7 @@
#include "coureur.h" //inclure le fichier "coureur.h" qui contien les libs et la structure coureur #include "coureur.h" //inclure le fichier "coureur.h" qui contien les libs et la structure coureur
#define TEMPSMAX 300 #define TEMPSMAX 300
#define TEMPSMIN 80 #define TEMPSMIN 80
#define TEMPSDOP 70 #define TEMPSDOP 78
struct element{ //definition de la structure qui element qui sera encaspule/chaine struct element{ //definition de la structure qui element qui sera encaspule/chaine
coureur * coureurActuel; //"contient" l'adresse d'une structure coureur 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 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 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 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); 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 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) 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) void invertCoureur(liste * l,int nb); //inverse l'element nb et nb+1 dans une liste (on considere un element 0)

View file

@ -6,11 +6,12 @@
#include <stdbool.h> #include <stdbool.h>
#include "liste.h" #include "liste.h"
int getNbLines(FILE * readFile); int getNbLines(void);
int getFileSize(FILE * readFile); 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); char * getLine(char * string,int line);
liste string2Liste(char * string,int nbLines); liste string2Liste(char * string,int nbLines);
void string2Coureur(char * string,char * nom, char * prenom, int * dossard); void string2Coureur(char * string,char * nom, char * prenom, int * dossard);
void deleteLineFeed(char * string);
void printHexString(char * string); void printHexString(char * string);
#endif #endif

View file

@ -5,13 +5,8 @@ int main(void)
{ {
int size, stepsNb, teamsNb, listeTaille, dopageCount=0; int size, stepsNb, teamsNb, listeTaille, dopageCount=0;
srand(time(NULL)); srand(time(NULL));
FILE * f=fopen ("fichier_coureurs.txt","r"); int fileLines = getNbLines();
char * fileString = (char *)(malloc(getFileSize(f)*sizeof(char))); liste l = getStringFromFile(fileLines,&size,&stepsNb,&teamsNb);
int fileLines = getNbLines(f);
getStringFromFile(f,fileLines,fileString,&size);
stepsNb = atoi(getLine(fileString,1));
teamsNb = atoi(getLine(fileString,2));
liste l = string2Liste(fileString,fileLines);
liste dopageList = initListe(); liste dopageList = initListe();
listeTaille = tailleListe(l); listeTaille = tailleListe(l);
@ -27,7 +22,6 @@ int main(void)
if(temptemps < TEMPSMIN) if(temptemps < TEMPSMIN)
{ {
ajoutListe(&dopageList,coureurTemp); ajoutListe(&dopageList,coureurTemp);
dopageCount++;
} }
} }
allerDebut(&l); allerDebut(&l);
@ -35,10 +29,11 @@ int main(void)
allerDebut(&l); allerDebut(&l);
printf(" --- AVANT : ---\n"); printf(" --- AVANT : ---\n");
printlist(l); printlist(l);
effacerListe(&l,&dopageList); dopageCount=effacerListe(&l,&dopageList);
printf("\n --- APRES : ---\n"); printf("\n --- APRES : ---\n");
triListe(&l,tailleListe(l)); triListe(&l,tailleListe(l));
printlist(l); printlist(l);
printf("\n --- NOMBRE DE PERSONNES DOPEES : %d ---\n",dopageCount);
return 0; return 0;
} }
@ -171,11 +166,11 @@ coureur * coureurCourant(liste * l)
* @param listeActuel Liste ou l'on suppr un element * @param listeActuel Liste ou l'on suppr un element
* @param coureurSuppr le coureur qui doit etre dans l'element pour le supprimer * @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)) if(!doesCoureurExist(listeActuel,coureurSuppr))
{ {
return; return false;
} }
struct element *eParcours =listeActuel->debut; struct element *eParcours =listeActuel->debut;
struct element * ePrevious; struct element * ePrevious;
@ -194,6 +189,7 @@ void effacerCoureur(liste * listeActuel,coureur * coureurSuppr)
ePrevious->suiv=eParcours->suiv; ePrevious->suiv=eParcours->suiv;
free(eParcours); free(eParcours);
} }
return true;
} }
bool doesCoureurExist(liste* l,coureur * c) bool doesCoureurExist(liste* l,coureur * c)
@ -210,14 +206,19 @@ bool doesCoureurExist(liste* l,coureur * c)
return false; return false;
} }
void effacerListe(liste * destination, liste * source) int effacerListe(liste * destination, liste * source)
{ {
int returnValue=0;
struct element * eCourant = source->debut; struct element * eCourant = source->debut;
while(eCourant->suiv != source->fin->suiv) while(eCourant->suiv != source->fin->suiv)
{ {
effacerCoureur(destination,eCourant->coureurActuel); if(effacerCoureur(destination,eCourant->coureurActuel))
{
returnValue++;
}
eCourant=eCourant->suiv; eCourant=eCourant->suiv;
} }
return returnValue;
} }
/** /**

View file

@ -7,9 +7,15 @@
* @param readFile le fichier en question * @param readFile le fichier en question
* @return int nombre de ligne * @return int nombre de ligne
*/ */
int getNbLines(FILE * readFile) int getNbLines(void)
{ {
int c,count=0; 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{ do{
c=getc(readFile); c=getc(readFile);
if(c == 0xa) if(c == 0xa)
@ -17,31 +23,72 @@ int getNbLines(FILE * readFile)
count++; count++;
} }
}while(c!=0xffffffff); }while(c!=0xffffffff);
fclose(readFile);
return count+1; return count+1;
} }
/** /**
* @brief Converti les caractères d'un fichier dans un string pour pouvoir * @brief Converti les caractères d'un fichier dans la liste de coureur.
* le manipuler plus simplement
* *
* @param readFile le fichier à lire * @param nbLines nombre de ligne du fichier qui va être lu
* @param nbLines son nombre de ligne
* @param returnString une chaîne de caractère vide à modifier
* @param size renvoie la taille de la chaîne de caractère * @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; liste l = initListe();
char temp[MAXLINE]; 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; *size=0;
strcpy(returnString,"");
fseek(readFile,0,0); fseek(readFile,0,0);
for(i=0;i<nbLines;i++) for(i=0;i<nbLines;i++)
{ {
fgets(temp,100,readFile); char * nom = (char *)(malloc(MAXLINE*sizeof(char)));
char * prenom = (char *)(malloc(MAXLINE*sizeof(char)));
int dossard=0;
fgets(temp,MAXLINE,readFile);
deleteLineFeed(temp);
switch(i)
{
case 0:
*stepsNb = atoi(temp);
break;
case 1:
*teamsNb = atoi(temp);
break;
default :
switch(j)
{
case 0:
strcpy(team,temp);
break;
default:
//printHexString(temp);
string2Coureur(temp,nom,prenom,&dossard);
coureur * coureurTemp = creerCoureur(nom,prenom,dossard,team,0);
ajoutListe(&l,coureurTemp);
}
j++;
if(j>5)
{
j=0;
}
free(nom);
free(prenom);
}
*size+=strlen(temp); *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 string la chaîne de caractère à analyser
* @param line int la ligne à récupérer * @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 * les équipes ainsi que les coureurs avec leur nom, leur prénom et numéro de dossard
* *
* @param string chaîne de caractère * @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; int i=0,j=0,k=0;
char * temp = (char *)(malloc(MAXLINE*sizeof(char))); char * temp = (char *)(malloc(MAXLINE*sizeof(char)));
while(string[j]!='\0'){ while(string[j]!='\0' && string[j]!='\n'){
k=0; k=0;
while(string[j] != ',' && string[j]!='\0'){ while(string[j] != ',' && string[j]!='\0'){
temp[k] = string[j]; 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é * la taille n'est pas demandée pour observer au delà de l'espace mémoire donné
* *
* @param string un tableau de caractère * @param string un tableau de caractère