Lang c

Résolu
alicia85 Messages postés 68 Date d'inscription   Statut Membre Dernière intervention   -  
Nabla's Messages postés 18203 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

8 réponses

alicia85 Messages postés 68 Date d'inscription   Statut Membre Dernière intervention  
 
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);
}
0
Sri Lumpa Messages postés 177 Date d'inscription   Statut Membre Dernière intervention   69
 
Quels sont tes problèmes exactement ? Pourrais-tu être un peu plus précise ?
0
alicia85 Messages postés 68 Date d'inscription   Statut Membre Dernière intervention  
 
j ai les pb dans depiler au niveau des lignes l=*p; et
*p=*p->suiv; le compilateur marque une erreurs a ce niveau je ne sais prquoi et aussi dans la fonction pilevide au niveau de la ligne pile *l=p; merci d avance
0
Sri Lumpa Messages postés 177 Date d'inscription   Statut Membre Dernière intervention   69
 
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.
0
alicia85
 
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Sri Lumpa Messages postés 177 Date d'inscription   Statut Membre Dernière intervention   69
 
Que veux-tu dire par "le fichier executable disparait" ? Il s'arrete ?
0
Nabla's Messages postés 18203 Date d'inscription   Statut Contributeur Dernière intervention   3 193
 
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) ...
0
Sri Lumpa Messages postés 177 Date d'inscription   Statut Membre Dernière intervention   69
 
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.
0
Nabla's Messages postés 18203 Date d'inscription   Statut Contributeur Dernière intervention   3 193
 
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 ;)
0
Sri Lumpa Messages postés 177 Date d'inscription   Statut Membre Dernière intervention   69
 
Non, ici p est un pointeur sur le pointeur de la pile ;) (depiler (pile **p)) et donc *p et le pointeur sur la pile. Mais tu as raison, c'est pas le problème pour l'instant ;)
0
Nabla's Messages postés 18203 Date d'inscription   Statut Contributeur Dernière intervention   3 193 > Sri Lumpa Messages postés 177 Date d'inscription   Statut Membre Dernière intervention  
 
j avou avoir repondu sans vraiment regarder le code en entier ;) ema culpa
0