Demande d'aide svp sur les liste chainé

[Résolu]
Signaler
Messages postés
4
Date d'inscription
mercredi 20 juillet 2011
Statut
Membre
Dernière intervention
20 mai 2012
-
Messages postés
15140
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
24 septembre 2021
-
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

Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
41
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
Messages postés
15140
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
24 septembre 2021
99
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...
Messages postés
15140
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
24 septembre 2021
99
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...
Messages postés
4
Date d'inscription
mercredi 20 juillet 2011
Statut
Membre
Dernière intervention
20 mai 2012

ç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