Bonjour,

Je dois réécrire la fonction dc de Linux, pour cela voici mon main :

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
 
int main(int argc, char const *argv[]) {
	Stack s;
	char *buffer;
	char *token;
	char *end;
	int value;
 
	initialize_fields(&s);
 
	while((buffer = readline("")) != NULL) {
		if(strlen(buffer) > 0) {
			add_history(buffer);
		}
 
		token = strtok(buffer, " ");
 
		while(token != NULL) {
			value = (int)strtol(token, &end, 10);
 
			if(end != NULL) {
				if(strcmp(end, "\0") == 0) {
					push(value, &s);
				}
				else {
					is_functionality(token[0], &s);
					is_operator(token, &s);
				}
			}
			s.top_stack++;
			token = strtok(NULL, " ");
		}
	}
	return 0;
}
La fonction initialize_fields() initialise ma structure de Stack qui contient un tableau de int* et le top de ma pile initialisé à 0.
La fonction push() met la valeur saisie dans mon tableau.
La fonction is_functionality() vérifie que la saisie est une fonction de la pile (afficher la pile, la détruire, etc...)
La fonction is_operator() vérifie que la saisie est un opérateur.

Mon problème est que je n'arrive pas à récupérer le bon top de ma pile. Après chaque saisie, mon top s'incrémente sauf que lorsque je saisie une fonctionnalité je récupère le top + 1, alors que je veux récupérer le top, mais je suis quand même obligé d'incrémenter mon top si la saisie est un nombre.

Je sais que je peux mettre que mon top est alors top - 1 pour récupérer le bon top, mais je ne trouve pas ça très beau, donc j'aimerais savoir s'il y a une solution pour récupérer le bon top lorsque je tape une fonctionnalité ou un opérateur.

Je peux envoyer entièrement mon code en MP si besoin.

Merci.