Demande d'aide svp sur les liste chainé

Résolu
memoireph Messages postés 4 Date d'inscription mercredi 20 juillet 2011 Statut Membre Dernière intervention 20 mai 2012 - 31 août 2011 à 16:27
BunoCS Messages postés 15304 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 27 septembre 2022 - 5 sept. 2011 à 17:12
mon but et de faire un tout petit dictionnaire j'ai fais deux fonction une pour l'ajout d'un mots et une autre pour la suppression d'un mots,quand j'appel cette fonction ça marche pas,prière de me donner un coup de pouce pour mon programme;

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>

typedef struct elm{
char fr[20];
char en[20];
elm *nxt;
}mots;
typedef mots* pointeur;
pointeur ajout(pointeur P){
pointeur nouveau,temp;
nouveau=(pointeur) malloc(sizeof(mots));
nouveau->nxt=NULL;
printf("entrer le mots en francais\n");
scanf("%s",&(nouveau->fr));
printf("entrer le mots en anglais\n");
scanf("%s",&(nouveau->en));
if(P==NULL){return nouveau;}
else{
temp=P;
while(temp->nxt!=NULL){
temp=temp->nxt;}
temp->nxt=nouveau;
return P;}}
pointeur effacer(pointeur P,char t[20]){
pointeur pred,pp;
printf("entrer le mots en fançais\n");
scanf("%s",t);
if(strcmp(P->fr,t)==0){
pp=P;
P=P->nxt;
free(pp);}
else{
pred=P;
pp=pred->nxt;
while(pp->nxt!=NULL && strcmp(pp->fr,t)!=0){
pred=pp;
pp=pp->nxt;
}}
if(pp==NULL){printf("mots introuvable\n");}
else{
pred->nxt=pp->nxt;
free(pp);
}
return P;}
int affiche(){
int choix;
do{
printf("#############################################\n");
printf("| 1-ajouter un element |\n");
printf("| 2-supprimer un element |\n");
printf("| 3-quitter |\n");
scanf("%d",&choix);
}while(choix <1 || choix >3);
system("cls");
return choix;}
main(){
pointeur P=NULL;
char *t;
int choix=affiche();
while(choix!=3){
switch (choix){
case 1:
ajout(P);
break;
case 2:
effacer(P,t);
break;}
choix=affiche();}
}

4 réponses

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 42
1 sept. 2011 à 09:22
Bonjour,

http://www.gnurou.org/writing/smartquestionsfr

si tu disais ce qui ne fonctionne pas précisément, ça nous permettrait de te donner une piste sans y passer trois heures.


Bon, déjà, remplace :
typedef struct elm{
char fr[20];
char en[20];
elm *nxt;
}mots;

par

typedef struct elm{
char fr[20];
char en[20];
struct elm *nxt;
}mots;


et donne un peu plus d'infos sur ce qui se passe quand tu compiles ou execute, les messages d'erreurs, et ce qui ne se passe pas normalement.

Cordialement,

Maxime
3
BunoCS Messages postés 15304 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 27 septembre 2022 103
5 sept. 2011 à 11:12
Hello,
Peux-tu utiliser la balise "code" pour formatter correctement ton code, s'il te plaît?


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
3
BunoCS Messages postés 15304 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 27 septembre 2022 103
5 sept. 2011 à 17:12
Dans ton main,
pointeur P=NULL; 
char *t; 

P est null et t n'est pas alloué. Donc, au début de ta fonction effacer:
- scanf plante à cause de t
- P->fr va planter également

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
3
memoireph Messages postés 4 Date d'inscription mercredi 20 juillet 2011 Statut Membre Dernière intervention 20 mai 2012
1 sept. 2011 à 14:10
ça se compile mais le problème c'est quand j'appelle la fonction effacer le programme se plante et il m'affiche "le programme a cessé de fonctionner",je pense que j'ai commis des erreur dans la fonction "effacer",
merci!
cordialement
0