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 -
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...
===========>
Merci d'avance pour vos interventions...
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:
- Lecture d'une pile en C
- Pile carte mere - Guide
- Lecture epub sur pc - Guide
- Confirmation de lecture whatsapp - Guide
- Télécharger livre de lecture ce2 gratuit pdf - Télécharger - Éducatifs
- Accusé de lecture gmail - Guide
6 réponses
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); }
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
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
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!!!!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.
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.