probleme char* et liste chainée
Bonjour dans le cadre d'un projet j'ai un programme de traduction de morse à faire en C.
Je recupere à partir d'un fichier texte, le code morse correspondant à chaque lettre.
Ce code est dans un char*. Je dois ensuite remplir une liste chainée (obligatoirement) contenant ce meme code et la lettre correspondant.
j'ai donc une liste:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
#ifndef liste_h
#define liste_h
#include<stdio.h>
#include<stdlib.h>
struct elem { char alpha;
char *morse;
struct elem* suiv;
};
typedef struct elem element;
typedef struct elem* liste;
#endif |
Les fonctions pour connaitre les valeurs de la liste
Code:
1 2 3 4 5 6 7 8 9
|
char alphaValeur(liste l)
{
return l->alpha;
}
char morseValeur(liste l)
{
return l->morse;
} |
Celle pour construire ma liste
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
liste cons(char a,char *m,liste l)
{
liste p;
p=(liste)malloc(sizeof(element));
p->alpha=a;
//strcpy(p->morse,m);
p->morse=*m;
p->suiv=l;
return p;
} |
Et celle pour l'afficher:
Code:
1 2 3 4 5 6 7 8 9 10 11
|
void afficheliste(liste l)
{
liste p=l;
while(p)
{
printf("(%c,%c) ",alphaValeur(p),morseValeur(p));
p=reste(p);
}
printf("\n");
} |
Voila le souci c'est que je n'ai pas le code morse complet, seulement la premiere lettre.
J'ai deja essayé de mettre un "%s" dans la fonction d'affichage mais le programme plante, une "*" dans la fonction qui me retourne le code morse mais le programme plante.
Je ne trouve pas de solutions si vous pouviez me donner un coup de pouce ça serait plutot cool.
Voici au passage ma procedure qui lit mon fichier texte:
Code:
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
|
void essai2()
{
FILE* fichier = NULL;
fichier = fopen("txtMorse.txt", "r");
char alpha;
char *morse=NULL;
char chaine[TAILLE_MAX] = "";
liste l=NULL;
int index;
if (fichier != NULL)
{
while (fgets(chaine, TAILLE_MAX, fichier)!= NULL) // On lit le fichier tant qu'on ne reçoit pas d'erreur (NULL)
{
alpha=chaine[0];
printf("%c",alpha);
morse=strpbrk(chaine,".-");
printf("%s\n",morse);
l=cons(alpha,morse,l);
}
}
fclose(fichier); // On ferme le fichier qui a été ouvert
afficheliste(l);
} |
Merci d'avance.