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








Répondre avec citation






+ 

Partager