Convertir le contenu d'un int en char

Résolu
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

--
KevDaig

4 réponses

  1. 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
    1. En fait, si j'entre un caractère, la valeur de la variable Niveau reste à 0...
      0
      1. 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
        1. Contributeur
          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
      2. Contributeur
        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
        1. ok je vois l'astuce. J'essaie ça et je vous reviens!

          Merci
          0
        2. Ç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