Bonjour,
J'aimerais obtenir des précisions sur le comportement de ce programme compilé avec GCC :
Le programme a pour SIMPLE but d'inverser les chiffres composant le nombre que l'on fourni en entrée au programme.
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 #include <stdio.h> #include <math.h> #include <ctype.h> short int ctoi(const int c) { if (c == '0') return 0; else if (c == '1') return 1; else if (c == '2') return 2; else if (c == '3') return 3; else if (c == '4') return 4; else if (c == '5') return 5; else if (c == '6') return 6; else if (c == '7') return 7; else if (c == '8') return 8; else if (c == '9') return 9; else return c; } int funcn(void) { char c; int n; int i, j; i = n = 0; while ((c = getchar()) != '\n' && c != EOF) { if (isdigit(c)) { n += (ctoi(c) * pow(10, i)); ++i; } } printf("---+ %d\n", n); return n; } int main(void) { unsigned int nl, nc; printf("NUM1> "); nl = funcn(); printf("\n\nNUM2> "); nc = funcn(); printf("%u %u\n", nl, nc); return 0; }
Le problème, c'est qu'avec GCC, le nombre inversé n'est pas exactement l'inverse du nombre concerné. Généralement, c'est comme si le programme soustrayais 1 ou 2 au nombre inversé.
Exemple:
Les réponses devraient évidemment être 4321 et 98765...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 NUM1> 1234 ---+ 4320 NUM2> 56789 ---+ 98763 4320 98763
Qu'est qui cause ces erreurs?
Comment palier à ce problème?
Notez que ce problème fait son apparition SEULEMENT avec GCC.
Compilé avec ICC (Intel) et CL (Microsoft), le programme se comporte comme il se doit.
Merci,
Sincèrement,
Array
Partager