Convertir le contenu d'un int en char

Résolu/Fermé
kevdaig Messages postés 16 Date d'inscription dimanche 31 août 2014 Statut Membre Dernière intervention 22 février 2016 - 22 janv. 2015 à 02:41
kevdaig Messages postés 16 Date d'inscription dimanche 31 août 2014 Statut Membre Dernière intervention 22 février 2016 - 22 janv. 2015 à 17:19
Bonjour, j'essaie de me faire une petite boucle de validation de la saisie au clavier. Les choix sont de 1 à 5 ou le caractère q pour quitter. Voici ce que j'ai fait qui ne fonctionne pas:

int DemandeNiveau(void)
{
int Niveau = 0;
int NiveauMin = 1;
int NiveauMax = 5;


printf("Quel niveau (1-5) desirez-vous jouer?\n");

scanf("%d",&Niveau);

if(Niveau >= NiveauMin && Niveau <= NiveauMax)
{
printf("Vous avez choisis %d\n", Niveau);
}

else
{
printf("Vous avez entre la lettre %c pour quitter ... \n", (char)Niveau);
}

return Niveau;
}

Et comme de fait, si j'entre q au clavier, il n'y a rien dans la variable Niveau. Quelqu'un peut m'aider?

Merci

4 réponses

Utilisateur anonyme
22 janv. 2015 à 02:45
Bonsoir,

if(Niveau >= NiveauMin && Niveau <= NiveauMax)

parce que ici tu essai de comparer un char a un int (ce qui n'est pas possible en C)
ce qui fait que normalement il ne devrait pas compiler
0
kevdaig Messages postés 16 Date d'inscription dimanche 31 août 2014 Statut Membre Dernière intervention 22 février 2016
22 janv. 2015 à 02:50
En fait, si j'entre un caractère, la valeur de la variable Niveau reste à 0...
0
lisons la doc : https://fr.wikipedia.org/wiki/Scanf

ton %d te renvoie un int donc a la saisie de q c'est compliquer

en lisant un peu plus on peu comprendre que tu as besoin de :

scanf("%c",&in);

if (niveau == 'q'){}
else {int niveau = (int) in}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
22 janv. 2015 à 09:46
else {int niveau = (int) in}
3 erreurs :
Il ne faut surtout pas redéclarer le type de la variable ici.
L'opérateur de comparaison est == (double égal).
Et (int) permet de caster le type, pas la valeur... Par exemple pour convertir :
in - '0'
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
22 janv. 2015 à 13:40
Bonjour,

Deux façons :
1
scanf("%d",&Niveau); 
ret=getchar();

if (Niveau...) {
     /*traitement*/
}
else {
     if (ret=='q') {
          /*traitement*/
     }
}

Ou mieux : tu lis un buffer de caractères, tu utilises fgets().
Si c'est différent de "q", tu convertis avec l'aide de strtol() en nombre.

Cdlt,
0
kevdaig Messages postés 16 Date d'inscription dimanche 31 août 2014 Statut Membre Dernière intervention 22 février 2016
22 janv. 2015 à 17:15
ok je vois l'astuce. J'essaie ça et je vous reviens!

Merci
0
kevdaig Messages postés 16 Date d'inscription dimanche 31 août 2014 Statut Membre Dernière intervention 22 février 2016
22 janv. 2015 à 17:19
Ça fonctionne!! Merci :-)

J'ai essayé pleins de tactiques bizarres hier soir et voilà qu'en 2-3 lignes de code, le problème est règlé. C'est magnifique !

Bonne journée à vous!
0