Fonction isnumeric (comme en VB :)

Signaler
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
-
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
-
Salut all,

je remercie d'avance la personne ki trouvera pkoi cette fonction ne marche pas (j'ai passé au total 3h pour cette %^$^ù* de fonction !!) :

int _stdcall isnumeric(char c[256])
{
int i, len_c;
char k;

len_c = strlen(c);

for (i = 0; i < len_c; ++i){
printf("len ; %d, %d\n", len_c, i);
for (k =47; k <= 58; ++k){
if ((strncmp(&c[i], &k, 1) == 0))
break;
else if ((strncmp(&c[i], &k, 1) == 1) || (strncmp(&c[i], &k, 1) == -1))
continue;
else
return 0;

}
}

return 1;
}

Cette fonction sert a déterminer si la chaine passée en argument est un nombre...mais ca marche po !! Si kelkun pouvait m'aider, je remercie d'avance !

Bonne prog all

Vive le C et le réseau !!!

6 réponses

Messages postés
584
Date d'inscription
mardi 26 novembre 2002
Statut
Membre
Dernière intervention
29 mai 2015

Euh...ça m'a l'air bien compliqué pour pas grand chose....

Tu veux juste vérifier que c'est un entier, non ?

int _stdcall isnumeric(char c[256])
{
int i;
int len_c = strlen(c);

for (i = 0; i < len_c; ++i){
if (c<'0' || c[i]>'9')
return 0;
}

return 1;
}

[i]On ne force pas une curiosité, on l'éveille.
.................................................Daniel Pennac
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
On ne parcourt pas une chaine 2 fois (strlen) quand 1 seule suffit.

char *c = buff;
while(*c) {
if((*c < '0') || (*c >'9')) return 0;
c++;
}
return 1;

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Merci pour les réponses, c'est clair que je me suis compliké la vie pour pas grand chose...
Par contre Brunews, j'ai pas compris pkoi tu utilisais un pointeur (char *c) et a koi correspond buff ???
Sinon merci beaucoup !

A ++

AlexMan

Vive le C et le réseau !!!
Messages postés
584
Date d'inscription
mardi 26 novembre 2002
Statut
Membre
Dernière intervention
29 mai 2015

woh...le retour de BruNews !!!
Tu étais en vacances ?
Effectivement j'ai pas optimisé.

J'e reprends donc avec l'idée de BruNews :

int _stdcall isnumeric(char c[256])
{
int i = 0;
int len_c = strlen(c);

while (c) {
if (c<'0' || c[i]>'9')
return 0;
i++;
}

return 1;
}

[i]On ne force pas une curiosité, on l'éveille.
.................................................Daniel Pennac
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Non pas en vacances, je deteste et c'est fait pour ceux qui s'emmerdent. Seulement en galere d'ADSL.
Que fait cet iterateur dans un parcours de chaine ? c'est bon pour VB ce truc hyper lent.

int _stdcall isnumeric(char *buff)
{
char *c = buff;
while(*c) {
if (*c<'0' || *c>'9') return 0;
c++;
}
return 1;
}

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Ok merci pour ton aide BruNews, et toi aussi garslouche...

Bonne prog les mecs...

a++

Vive le C et le réseau !!!