Il y a surtout un très gros boulot de réécriture pour que ce code soit plus simple et plus lisible.
D'abord pour comparer 2 caractères, on n'utilise pas strcmp (qui, je rappelle permet de comparer 2 chaines de caractères complètes) : on compare les caractères, tout simplement !
Donc n'écris pas
Code :
- if ( (strcmp (&buffer[i],"0" ) >= 0 ) && (strcmp (&buffer[i],"9" ) <= 0 ))
|
mais
Code :
- if (buffer[i] >= '0' && buffer[i] <= '9')
|
. Plus simple, non ?
Ensuite, pour convertir le caractère en chiffre, la méthode la plus simple est d'écrire
Code :
- digit = (int) buffer[i] - (int) '0';
|
au lieu de ta cascade de ifs.
La seule chose que suppose ce code est que le codage des chiffres est contigu dans la table de caractères.
Enfin, deux des trois boucles sont inutiles dans ton main. Tu peux convertir ta chaine en entier avec une seule boucle, comme suit :
Code :
- const int maxLen = 15;
- const char endOfString = '\0';
- int number = 0;
- char digit = buffer[0];
- if (digit != endOfString) {
- int i = 0;
- do {
- if (digit >= '0' && digit <= '9') {
- number = 10 * number + (digit - '0');
- }
- else {
- // Erreur. Quitter la boucle.
- break;
- }
- i++;
- digit = buffer[i];
- } while (i < maxLen || digit != endOfString);
- }
|
Message édité par BifaceMcLeOD le 12-03-2003 à 11:17:05