Dans mon main, j'ai une chaine de caractère. Je veux mettre tous mes nombres dans la queue et tous les opérateurs dans la pile.
Pour la pile tout est ok, il n'y à aucun problème. Pour la queue ca se complique, a un moment j'arrive à avoir tous les nombres quand j'appelle cette fonction, ca les affiche sans problème ==>
Ca c'est ok et ca m'affiche bien ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part puts(number);
2
53
8
472
98
788
Je veux envoyer chacun de ces éléments grace a la fonction put_queue et ensuite afficher ma liste chainee en queue grace a la fonction view_queue mais ca ne m'affiche que des caractères spéciaux ... bizarre ... quelqu'un a t - il une solution svp ?
Voici le code en entier ==>
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130 #include <stdlib.h> struct pile { char valeur; struct pile *new; }; struct queue { char *donnee; struct queue *suivant; }; int put_queue(struct queue **p_file, char *donnee) // met des éléments dans la queue { struct queue *p_nouveau = malloc(sizeof *p_nouveau); if (p_nouveau != NULL) { p_nouveau->suivant = NULL; p_nouveau->donnee = donnee; if (*p_file == NULL) { *p_file = p_nouveau; } else { struct queue *p_tmp = *p_file; while (p_tmp->suivant != NULL) { p_tmp = p_tmp->suivant; } p_tmp->suivant = p_nouveau; } } return (0); } int put_pile(struct pile **p_list, char valeur) // met des éléments dans la pile { struct pile *new; new = malloc(sizeof(*new)); if (new == NULL) return (1); new->valeur = valeur; new->new = *p_list; *p_list = new; return (0); } void view_queue(struct queue *p) // affiche la queue { while (p != NULL) { puts(p->donnee); putchar('\n'); p = p->suivant; } } void view_pile(struct pile *p) // affiche la pile { while (p != NULL) { puts(p); putchar('\n'); p = p->new; } } int stock(char *src) // des que j'ai un nombre, je le met dans la queue et dès que j'ai un opérateur je le met dans la pile { struct pile *p_list; struct queue *q_list; char *number; char *operator; int i; int j; number = malloc(sizeof((number) + 1)); p_list = NULL; q_list = NULL; i = 0; j = 0; while (src[i]) { if (src[i] >= '0' && src[i] <= '9') { while (src[i] >= '0' && src[i] <= '9') { number[j] = src[i]; j++; i++; number[j] = '\0'; } puts(number); putchar('\n'); put_queue(&q_list, number); } else if (src[i] == '*' || src[i] == '+' || src[i] == '-' || src[i] == '/' || src[i] == '%') { put_pile(&p_list, src[i]); i++; } else { while (j >= 0) { number[j] = '\0'; j--; } i++; j = 0; } } view_pile(p_list); view_queue(q_list); return (0); } int main(int arg, char **argv) { char test[] = "2 * 53 + 8 - 472 + 98 - 788"; stock(test); return (0); }
Partager