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
|
||||
CLEAN=clean
|
||||
|
||||
all: clean $(EXEC) exec
|
||||
all: $(EXEC) exec
|
||||
|
||||
main: liste.o coureur.o readfile.o
|
||||
$(CC) $(CFLAGS) -o $@ $^
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -6,11 +6,12 @@
|
|||
#include <stdbool.h>
|
||||
#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
|
27
src/liste.c
27
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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
101
src/readfile.c
101
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;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);
|
||||
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
|
||||
|
|
Loading…
Add table
Reference in a new issue