Bonsoir tout le monde
après des heures de recherches à devenir fou
je décide de m'en réferer à vous car sinon ...
Le problème, est que la boucle while, à chaque
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62 #include <stdio.h> #include <stdlib.h> void initialiserPile(Pile** p); void affichePile(Pile* p); void push (Pile **p, char a); int main(){ Pile* p; char car; initialiserPile(&p); affichePile(p); printf("Entrer un mot se finissant par '.'\n"); printf("Entrer la valeur de c : \n"); do{ car=getchar(); if(car!='.'){ push (&p, car); printf("Valeur rajouté !!\n"); } else printf("Valeur non rajouté !!"); }while(car!='.'); push (&p, 'z'); push (&p, 'u'); affichePile(p); return(0); } void initialiserPile(Pile** p){ *p=NULL; } void affichePile(Pile* p){ int n=0; while(p!=NULL){ printf("val de a : %c\n",p->valeur); p=p->prec; n++; } printf("TAILLE DE LA PILE : %d\n",n); } void push (Pile **p, char a){ Pile *tmp; tmp=(Pile*) malloc(sizeof(Pile)); tmp->valeur=a; tmp->prec=*p; *p=tmp; }
passage, est éxécutée deux fois pour je ne sais quelle raison;
et exactement le même comportement si j'utilise un scanf à la place de getchar()
Vous ne le voyez pas, mais quand j'affiche la taille de la pile suite à cette
exemple, elle est également doublé, donc à chaque fois qu'il y a eu :
"Entrer la valeur de a :"
il a rajouté "RIEN?" à la pile
J'ai alors essayé de me passer du while, et utilisé ceci à la place pour
essayer de deviner d'où vient ce fameux problème :
et cette fois-ci, le premier scanf marche parfaitement, mais le 2è
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 .... printf("===>Entrer la valeur de c : \n"); scanf_s("%c",&car); if(car!='.') push (&p, car); printf("===>Entrer la valeur de c : \n"); scanf_s("%c",&car); if(car!='.') push (&p, car); push (&p, 'z'); push (&p, 'u'); ....
n'a pas du tout l'air d'avoir été pris en comte, et le caractère espace,
ou NULL, semble avoir été mis dedans ...
Dans les deux cas, les caractères 'z', et 'u', sont bien rajoutés à la pile
J'aimerais bien connaître mes erreurs dans les deux cas si possible
Partager