Debug complet, ne lit plus dans un string, affichage du nombre de personnes dopées
This commit is contained in:
parent
2d6c53d2d6
commit
2fb5d11074
5 changed files with 106 additions and 35 deletions
2
Makefile
2
Makefile
|
@ -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 $@ $^
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
27
src/liste.c
27
src/liste.c
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
101
src/readfile.c
101
src/readfile.c
|
@ -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
|
||||||
|
|
Loading…
Add table
Reference in a new issue