Lecture d'une pile en C

Résolu
limbergh Messages postés 658 Date d'inscription   Statut Membre Dernière intervention   -  
limbergh Messages postés 658 Date d'inscription   Statut Membre Dernière intervention   -
Bonsoir,

j'ai un code où j'ai crée une structure. Je rentre des données dans la pile et j'essaye de les afficher mais ça ne fonctionne pas l'affichage... Je pense que c'est quelque chose comme "fflush(stdin)" qu'il faut ou autre chose. Je poste ici mon code pour que vous y jetiez un coup d'œil...

===========>

#include <stdio.h>
#include <stdlib.h>
#define N 50

typedef struct liste
{
    char nom[N];
    char prenom[N];
    int age;
    struct liste *suivant;
}Liste;



int main()
{
    int choice=0, j, i;
    int  cpt=0, pos=0;
    char choix;
    Liste *pbase, *ptrav, *pbis;
    pbase=NULL;
    do
    {


        printf("\n==================MENU=====================\n");
        printf("-1- introduire les donnees de la pile\n");
        printf("-2- afficher les donnees de la pile\n");
        printf("-3- compteur de la pile\n");
        printf("-4- insertion apres le Neme element\n");
        printf("-5- insertion avant le Neme element\n");
        printf("votre choix===>");
        scanf("%d", &choice);
        switch (choice)
        {
        case 1 :

            printf("Introduire...O/N===>");
            scanf("%s", &choix);

            do
            {
                ptrav=malloc(sizeof(Liste));
                ptrav->suivant=pbase;
                pbase=ptrav;
                printf("nom : ");
                scanf("%s", &ptrav->nom[N]);
                printf("prenom : ");
                scanf("%s", &ptrav->prenom[N]);
                printf("age : ");
                scanf("%d", &ptrav->age);
                printf("Introduire...O/N===>");
                scanf("%s", &choix);

            }
            while (choix=='O');
            break;
        case 2 :

            ptrav=pbase;


            while (ptrav != NULL)
            {

                printf("%s\n", ptrav->nom);
                printf("%s\n", ptrav->prenom);
                printf("%d\n", ptrav->age);
                ptrav=ptrav->suivant;


            }
            break;
        case 3 :

            ptrav=pbase;

            while (ptrav != NULL)
            {
                ptrav=ptrav->suivant;
                cpt++;
            }

            printf("compteur = %d ", cpt);
            cpt=0;
            break;

        case 4 :
            ptrav=pbase;
            pbis=(Liste *)malloc(sizeof(Liste));
            printf("nom : ");
            scanf("%s", &pbis->nom[N]);
            printf("prenom : ");
            scanf("%s", &pbis->prenom[N]);
            printf("age : ");
            scanf("%d", &pbis->age);
            printf("position a inserer : ");
            scanf("%d", &pos);

            for (j=1;j<pos;j++)
                ptrav=ptrav->suivant;
            pbis->suivant=ptrav->suivant;
            ptrav->suivant=pbis;
            ptrav=pbase;
            break;
        case 5 :
            ptrav=pbase;
            pbis=(Liste *)malloc(sizeof(Liste));
            printf("nom : ");
            scanf("%s", &pbis->nom[N]);
            printf("prenom : ");
            scanf("%s", &pbis->prenom[N]);
            printf("age : ");
            scanf("%d", &pbis->age);
            printf("position a inserer : ");
            scanf("%d", &pos);

            if (pos==1)
            {
                pbis->suivant=pbase;
                pbase=pbis;
                ptrav=pbase;
            }
            else
            {
                for (i=1;i<pos-1;i++)
                    ptrav=ptrav->suivant;

                pbis->suivant=ptrav->suivant;
                ptrav->suivant=pbis;
                ptrav=pbase;
            }
            break;



        }

    }
    while (choice!=0);

    return 0;

}


Merci d'avance pour vos interventions...
A voir également:

6 réponses

lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

            do
            {
                ptrav=malloc(sizeof(Liste));
                ptrav->suivant=pbase;
                pbase=ptrav;
                printf("nom : ");
                scanf("%s", ptrav->nom);
                getchar();
                printf("prenom : ");
                scanf("%s", ptrav->prenom);
                printf("age : ");
                scanf("%d", &ptrav->age);
                printf("Introduire...O/N===>");
                scanf("%s", &choix);

            }
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Re,

Je ne comprends pas
scanf("%s", &pbis->nom[N]);

nom c'est une chaîne de caractère et le nom c'est l'adresse du 1er pointeur donc pas besoin &
ensuite [N] on l'utilise pour la déclaration mais pas pour le scanf
0
limbergh Messages postés 658 Date d'inscription   Statut Membre Dernière intervention   140
 
magnifique ça fonctionne...

Pourquoi???? Je ne comprend pas bien le getchar()

Merci d'avance...
0
limbergh Messages postés 658 Date d'inscription   Statut Membre Dernière intervention   140
 
nom c'est une chaîne de caractère et le nom c'est l'adresse du 1er pointeur donc pas besoin &
ensuite [N] on l'utilise pour la déclaration mais pas pour le scanf 


oui exact, j'ai fait une grosse boulette!!!!
0

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

Posez votre question
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Re,

En fait il faut t'imaginer ce qui se passe quand tu tapes au clavier
L'emplacement de getchar est plutôt après l'âge.

Par exemple, si tu tapes l'âge 10 et tu fais ENTRER, vu que ta variable lit l'entier il reste quand même le caractère '\n' qui est obtenu par l'action de la touche ENTRER.
Ce caractère il faut l'avaler pour qu'il ne soit pas lu par le prochain scanf.
0
limbergh Messages postés 658 Date d'inscription   Statut Membre Dernière intervention   140
 
ok,

je pense avoir compris...Encore merci pour tes explications

Bonne soirée
0