Lang c
Résolu
alicia85
Messages postés
75
Statut
Membre
-
Nabla's Messages postés 18201 Date d'inscription Statut Contributeur Dernière intervention -
Nabla's Messages postés 18201 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,comment aller vous j ai un pb sur la verification de la syntaxe d une chaine de caratere j utilise les piles mais mon programme plante voici les procedures pr gerer la pile est ce que c est bon ?
j ai un pb au niveau de depiler et pilevide
j ai un pb au niveau de depiler et pilevide
Configuration: Windows 2000 Internet Explorer 6.0
8 réponses
-
voici le code
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef union enreig{
char c;
int valeur;
}tab;
typedef struct noeud{
tab enreig;
struct neoud *suiv;
}pile;
void creepile(pile**p){
*p=NULL;
}
tab sommet(pile*p){
return(p->enreig);
}
int pilevide(pile *p){
return(p==NULL);
}
int taille_pile(pile*p){
pile *l=p;
int i=0;
while((l!=NULL)&&(++i))
l=l->suiv;
return(i);
}
int empiler(pile**p,const tab t){
{pile*l;
l=(pile*)malloc(sizeof(pile));
if(l!=NULL){
// l->enreig=(tab*)malloc(sizeof(tab));
// if (l->nom!=NULL){
l->enreig=t;
l->suiv=*p;
*p=l;
}
else{
free(l);
l=NULL;
}
return(l!=NULL);
}
void depiler(pile**p){
pile*l;
l=*p;
*p=*p->suiv;
free(l);
} -
Quels sont tes problèmes exactement ? Pourrais-tu être un peu plus précise ?
-
Dans la fonction depiler, j'ai trouvé ton erreur : quand tu fais *p = *p->suiv, tu dois mettre des parenthèses : *p = (*p)->suiv;. Sans ça, il interprète ta ligne comme ça en fait : *p = *(p->suiv); et en effet, dans ce cas là, p n'est pas une structure mais un pointeur de pointeur sur ta structure. Je n'ai pas d'autres erreurs de compilation.
Juste un conseil, dans ta fonction empiler il vaut mieux éviter le else {free(l) ; l = NULL}. Si on arrive là, c'est que justement l vaut déjà null et n'a pas été initialisé. Si tu fais un free() dessus, tu feras un free(NULL) et ça peut être assez mauvais. -
merci beaucoup pour tout mais j ai un pb avec mon code lorsque je l execute le fichier executable disparait apres avoir entrer le s données bien qu'ayant getch() ou getchar a la fin du main .que faire ? merci d'avance
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Que veux-tu dire par "le fichier executable disparait" ? Il s'arrete ?
-
je pense plutot que tu dois faire p=p->suiv , ca deplace le pointeur. dans l autre cas, si ca marche ca copie l objet complet.
pour ton getchar qui bloc pas, il faut vider le buffer d entrée: flush.
je me rapelle plus de la syntaxe, peut etre es ce flush(stdin) ... -
Justement, il vaut mieux déplacer juste le pointeur plutôt que l'objet complet quand tu traites une pile...
Remplace ton getchar() par un scanf("%s", NULL), ça attendra que l'utilisateur tape "entrée" pour continuer. -
p c est le pointeur
*p c est l objet, la structure ....
donc il vaut æieu faire p=p->suiv . ceci dit le probleme nes tpas la actuelement ;)