Convertir le contenu d'un int en char

Résolu
kevdaig Messages postés 16 Statut Membre -  
kevdaig Messages postés 16 Statut Membre -
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. Utilisateur anonyme
     
    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
  2. kevdaig Messages postés 16 Statut Membre
     
    En fait, si j'entre un caractère, la valeur de la variable Niveau reste à 0...
    0
  3. Utilisateur anonyme
     
    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. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      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
  4. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    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. kevdaig Messages postés 16 Statut Membre
       
      ok je vois l'astuce. J'essaie ça et je vous reviens!

      Merci
      0
    2. kevdaig Messages postés 16 Statut Membre
       
      Ç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