Manipulation de la pile

Fermé
enisione - 4 avril 2013 à 12:52
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 4 avril 2013 à 14:03
Bonjour,

svp j'ai un problème dans mon code , mais j'ai pas pu le trouvé , en fait mon code est exécutable mais je vous invite à l'essayer pour pouvoir trouver le problème.

mon programme te donne le choix d'empiler ou dépiler des caractères dans une pile ;

voici l'algorithme :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct Liste_pile
{
char T[50];
int som;
} pile ;

void depiler (pile P, char *e)
{
int i;

if(P.som != 0)
{
*e = P.T[0];

for(i=0;i<P.som;i++)
{
P.T[i] = P.T[i+1];
}
P.som = P.som -1;
}
else { *e='0'; printf("\n erreur, pile vide "); }
}

void empiler (pile P, char *e)
{
int i;

P.som=P.som + 1;
for(i=P.som;i>0;i--)
{
P.T[i]=P.T[i-1];
}
P.T[0] = *e;

}

int main(int argc, char *argv[])
{
int choix,rep,i;
pile P;
char c;

rep=1;
P.som=0;

while (rep==1)
{

printf(" \n ecrire 1 si tu veux empiler et 0 si tu veux depiler: "); scanf(" %d",&choix);

if (choix==1)
{
printf("\n ecrire votre caractere : "); c=getchar();
empiler(P,&c);
P.som++;
}
else if (choix==0)
{
depiler(P,&c);
printf("\n le sommet est : %c",c);
P.som--;

}
else { printf("erreur "); }


printf("\n veux tu faire autre chose \n 0- non \n 1- oui \n "); scanf("%d",&rep);
}

for (i=0;i<=P.som;i++)
{
printf(" %c ",P.T[i]);
}




return 0;
}


Merci

1 réponse

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
4 avril 2013 à 14:03
il ne faut pas utiliser le passage par copie, mais par pointeur si tu veux modifier P.
1