1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
| #include <stdlib.h>
#include <stdio.h>
#include <string.h>
struct element
{
char *val; //lettre alphabet ou chiffre
char *morse; //équivalent morse
struct element *suivant;
};
typedef struct element ELEMENT;
typedef struct element *Listes;
Listes add_element(Listes liste, char *Caract, char *Morse)
{
Listes NewElement = (Listes)malloc(sizeof(ELEMENT));
NewElement->suivant = NULL; // Le dernier élément pointe sur rien.
// Allocation mémoire pour les valeurs caract et morse
NewElement->val = (char*)malloc(sizeof(char)*strlen(Caract));
NewElement->morse = (char*)malloc(sizeof(char)*strlen(Morse));
Listes TmpList = liste;
/* Contrôle si la liste contient au moins un élément. Si ce
* n'est pas le cas on ne fait qu'affecter le nouvel élément.
*/
if (liste==NULL) liste = NewElement;
else
{
// Recherche du dernier élément de la liste actuelle
while (TmpList->suivant!=NULL) TmpList=TmpList->suivant;
// Affectation du nouvel élément à la liste actuelle
TmpList->suivant = NewElement;
}
// Affectation des valeurs à Caract et Morse.
memcpy(NewElement->val, Caract, sizeof(char)*strlen(Caract));
memcpy(NewElement->morse, Morse, sizeof(char)*strlen(Morse));
return liste;
}
int
main(int argc, char *argv [])
{
char ligne[20]; //tableau tampon ligne
char *Caract;
char *Morse;
FILE * fichier;
Listes liste=NULL, TmpList=NULL;
int compteur=1;
fichier = fopen("liste_conversion.txt","r"); //ouverture du fichier en lecture avec la fonction fopen()
if (fichier != NULL) //on teste si le fichier existe
{
printf("Ouverture du fichier de conversion ok\n"); //affiche «ouverture ok» si louverture sest bien passée
}else //sinon
{
printf("Ouverture impossible"); //on affiche ouverture impossible
exit(1); //on force la sortie de la boucle
}
// Extraction des données du fichier texte et insertion dans la liste chaînée.
while (fgets(ligne,20,fichier) != NULL)
{
Caract = strtok(ligne,"=");
Morse = strtok(NULL,"=");
liste=add_element(liste, Caract, Morse);
}
// Lecture de la liste chaînée.
TmpList = liste;
while (TmpList!=NULL)
{
printf("élément %d : ", compteur);
printf("val = %s\t", TmpList->val);
printf("morse = %s", TmpList->morse);
compteur++;
TmpList = TmpList->suivant;
}
// Destruction de la liste
TmpList = liste;
while (TmpList!=NULL)
{
liste=TmpList;
free(TmpList->val);
free(TmpList->morse);
free(TmpList);
TmpList=liste->suivant;
}
return 0;
} |
Partager