Caractère dans int

Résolu
nashoy Messages postés 125 Date d'inscription dimanche 6 avril 2003 Statut Membre Dernière intervention 7 octobre 2006 - 7 nov. 2005 à 15:28
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 8 nov. 2005 à 10:10
Bonjour,

j'ai un petit soucis : j'ai le code suivant :

int menu;
scanf("%d",&menu);

mais évidemment, quand on entre une lettre par exemple, il déglingue en faisant une boucle infinie .. y a t'il moyen de corriger ça ?

J'ai essayé d'une manière un peu "bourrin", mais ça ne donne rien :

int menu;
char test;
scanf("%d",&menu);
test = (char)menu;
if (test == menu){printf("Le chiffre indique n'est pas valable.\n");}


nashoy

10 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
7 nov. 2005 à 16:37
if(sz[0] >= 48 && sz[0] <= 57) UN CHIFFRE

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
3
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
7 nov. 2005 à 16:54
int main(
int argc,
char *argv[])


{



int menu;



char * szSaisie;


szSaisie = (
char *)malloc(8);


scanf("%s", szSaisie);



if((
int)szSaisie[0] > 47 && (
int)szSaisie[0] < 58)


{


menu = atoi(szSaisie);



// ToDo :


}



else


{



// Traintement spécifique pour les mauvaise saisie


}



return 0;


}

Shell
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
7 nov. 2005 à 15:36
Récupère ton entrée dans une chaine et vérifie si c'est bien un chiffre entré avant de le convertir en int par atoi().

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
nashoy Messages postés 125 Date d'inscription dimanche 6 avril 2003 Statut Membre Dernière intervention 7 octobre 2006
7 nov. 2005 à 16:10
Je viens de chercher des infos sur atoi() et j'ai compris ..
par contre, existe-t-il une fonction qui permet de connaitre le type de variable, ou alors de différencier un char * d'un int ?
Merci


nashoy
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
7 nov. 2005 à 16:17
Le développeur sait tout de même ce qu'il déclare comme variable, non ?

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
nashoy Messages postés 125 Date d'inscription dimanche 6 avril 2003 Statut Membre Dernière intervention 7 octobre 2006
7 nov. 2005 à 16:25
Oui désolé j'ai mal posé ma question ..
La question n'était pas de connaitre le type de variable, mais le contenu ; en gros savoir si le contenu de char peut ou non être convertit en int (donc savoir si la variable ne contient que des chiffres).


nashoy
0
nashoy Messages postés 125 Date d'inscription dimanche 6 avril 2003 Statut Membre Dernière intervention 7 octobre 2006
7 nov. 2005 à 19:50
Cool ça marche, merci bien


nashoy
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
8 nov. 2005 à 09:36
Vu que ce sont des char, tu peux enlever les cast (int) dans mon exemple.

Sinon clique sur réponse accepter pour la/les réponse(s) qui te convien(nen)t.

Shell
0
nashoy Messages postés 125 Date d'inscription dimanche 6 avril 2003 Statut Membre Dernière intervention 7 octobre 2006
8 nov. 2005 à 10:07
Juste une petit question : a quoi correspond if(szSaisie[0] > 47 && szSaisie[0] < 58) alors?


nashoy
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
8 nov. 2005 à 10:10
teste si un caractère (le 1er dans cet exemple) d'unc chaine est un chiffre.
48 est valeur octet '0', 57 est '9'.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
0
Rejoignez-nous