Bonjour,

Je me suis donné comme exercice de C d'écrire une petite calculatrice RPN. Le code pour le stack est écrit et semble bien fonctionner, je me suis donc attaqué à la tokenisation du input. Afin de savoir si un token est un nombre, j'ai écrit une fonction. J'ai écrit un douzaines de tests unitaires, et la fonction semble les passer tous, par contre je trouve ma fonction longue et un peu compliquée. J'apprécierais des commentaires de nature fonctionnelle, stylistique, de sécurité, de fiabilité, de portabilité, etc.

Merci.

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
 
int isnumber(char *s)
{
    size_t i;
    size_t len;
    int period = 0;
 
    /* Skip over white spaces. */
    while (isspace(*s))
        ++s;
 
    if (*s == '+' || *s == '-')
        s++;
 
    i = 0;
    len = strlen(s);
 
    if (len == 0)
        return 0;
 
    for (i = 0; i < len; ++i) {
        /* Only one period is allowed */
        if (!period && s[i] == '.') {
            period++;
        }
        else if (period && s[i] == '.') {
            return 0;
        }
        /* Ignore everything after a space */
        else if (isspace(s[i])) {
            return 1;
        }
        else if (!isdigit(s[i])) {
            return 0;
        }
    }
 
    return 1;
}