Bonjour,
Etant actuellement pressé sur un projet (d'ou le code, certes un peu bourrin), je viens faire appel à vos lumière car complètement perdu sur un bug que je ne comprends pas.
La partie de code qui me pose soucis est une sorte de parseur. Je lis dans un fichier une chaine de caractère, la convertit en une opération (cinq plus cinq devient 5 + 5). Cette partie fonctionne correctement, et je ferme ensuite le fichier. Puis vient le passage du calcule après conversion.
Voici le segment de code concerné :
Le soucis est que mon programme saute dès le premier passage à l'erreur "L'operation n'est pas un symbole accepté". Soit, soucis de test donc, je passe par des printf pour comprendre le cas que je n'ai pas pris en compte. Sauf que, les printf ne marchent pas ! Aucun de ceux affichés dans le code (en dehors de Chaine finale), ne passe. J'ai tenté par ajout de "\n" à la fin de chaque printf, par ajout de fflsuh(stdout), mais rien n'y fait ! pas une seule valeur ne s'affiche.
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 printf("\nChainePurgeeFINALE = %sFIN",chainePurgee); fflush(stdout); //Fin du fichier chainePurgee contient la chaine ex: moins un plus moins deux //plus longue type de chaine de base => prevoir les signes ! while(c!='\0') { printf("\nDEBUT BOUCLE\n"); //Composer un mot jusqua l'espace c=chainePurgee[i]; printf("\nCHAR TRAITE : %c\n",c); i++; if(c != ' ') { x=whatIsIt(c); printf("\nINT TRAITE : %d\n",x); if(x < 0 && ((flagOpA==0 && flagOpeator==0) || (flagOpeator==1 && flagOpB==0))) //Si x detecte comme operande { if(x == -1) { fact=1; } else { if(x == -2) { fact=-1; } else { printf("\n**ERREUR** Operation mal placée ou erreur de traitement."); exit(1); } } if(flagOpA==0) flagOpA=1; else if(flagOpA==1) flagOpB=1; } if(x < 0 && (flagA==1 && flagOpeator==0))//x detecte comme operation { operation=x; printf("\nOPERATION VOULUE : %d\n",operation); switch(operation) { case -1: operationChar='+'; break; case -2: operationChar='-'; break; case -3: operationChar='*'; break; case -4: operationChar='/'; break; default : printf("\n**ERREUR** L'operation n'est pas un symbole accepté."); exit(1); } } else//x detecte comme chiffre, on prend en compte le facteur issue du signe de l'operande { if(flagA==0) { operandeA=fact*x; flagA=1; fact=1; } else { if(flagB==0) { operandeB=fact*x; flagB=1; fact=1; } else { printf("\n**ERREUR** Chiffre mal placé ou erreur de traitement."); } } } } //On passe l'espace i++; j=0; } //Les operandes, operations sont en place, on lance le calcul resultat=calcul(operandeA, operation, operandeB, 0 , 0);
Cela m'empêchant de débuguer ce fouillis temporaire, quelqu'un aurait il une idée sur ce qui cloche ?
chainePurgee est un tableau de 12 caractère max, déclarée en statique. Le reste est principalement constitué de flags pour faire office de marqueurs. La fonction appelée ne fait qu'une conversion de type atoi(), et interprête les symboles d'opération.
Merci !
Partager