Lang c
Résolu/Fermé
alicia85
Messages postés
68
Date d'inscription
lundi 19 mai 2008
Statut
Membre
Dernière intervention
20 août 2009
-
22 juin 2008 à 13:21
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 - 25 juin 2008 à 11:40
Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 - 25 juin 2008 à 11:40
8 réponses
alicia85
Messages postés
68
Date d'inscription
lundi 19 mai 2008
Statut
Membre
Dernière intervention
20 août 2009
22 juin 2008 à 13:25
22 juin 2008 à 13:25
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);
}
#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);
}
Sri Lumpa
Messages postés
177
Date d'inscription
mercredi 14 novembre 2007
Statut
Membre
Dernière intervention
1 juin 2010
69
22 juin 2008 à 13:35
22 juin 2008 à 13:35
Quels sont tes problèmes exactement ? Pourrais-tu être un peu plus précise ?
alicia85
Messages postés
68
Date d'inscription
lundi 19 mai 2008
Statut
Membre
Dernière intervention
20 août 2009
22 juin 2008 à 13:47
22 juin 2008 à 13:47
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
*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
Sri Lumpa
Messages postés
177
Date d'inscription
mercredi 14 novembre 2007
Statut
Membre
Dernière intervention
1 juin 2010
69
22 juin 2008 à 17:28
22 juin 2008 à 17:28
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.
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
Sri Lumpa
Messages postés
177
Date d'inscription
mercredi 14 novembre 2007
Statut
Membre
Dernière intervention
1 juin 2010
69
25 juin 2008 à 07:19
25 juin 2008 à 07:19
Que veux-tu dire par "le fichier executable disparait" ? Il s'arrete ?
Nabla's
Messages postés
18203
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 193
25 juin 2008 à 09:29
25 juin 2008 à 09:29
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) ...
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) ...
Sri Lumpa
Messages postés
177
Date d'inscription
mercredi 14 novembre 2007
Statut
Membre
Dernière intervention
1 juin 2010
69
25 juin 2008 à 11:27
25 juin 2008 à 11:27
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.
Remplace ton getchar() par un scanf("%s", NULL), ça attendra que l'utilisateur tape "entrée" pour continuer.
Nabla's
Messages postés
18203
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 193
25 juin 2008 à 11:31
25 juin 2008 à 11:31
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 ;)
*p c est l objet, la structure ....
donc il vaut æieu faire p=p->suiv . ceci dit le probleme nes tpas la actuelement ;)
Sri Lumpa
Messages postés
177
Date d'inscription
mercredi 14 novembre 2007
Statut
Membre
Dernière intervention
1 juin 2010
69
25 juin 2008 à 11:38
25 juin 2008 à 11:38
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 ;)
Nabla's
Messages postés
18203
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 193
>
Sri Lumpa
Messages postés
177
Date d'inscription
mercredi 14 novembre 2007
Statut
Membre
Dernière intervention
1 juin 2010
25 juin 2008 à 11:40
25 juin 2008 à 11:40
j avou avoir repondu sans vraiment regarder le code en entier ;) ema culpa