Forum Programmation.c scanf et itération

Posté par  .
Étiquettes : aucune
0
8
mar.
2005
Bonjour,

Le code ci-dessous est censé demander à l'utilisateur une lettre entre 'a' et 'g' que je convertis en entier(a=0, b=1, etc.) mais je n'otiens pas ça du tout. Je place ensuite ce chiffre en argument à une fonction. Le caractere 'entree' est pris en compte...
Auriez-vous une idée? Je cherche depuis un bon moment déjà...
Le code ci-dessous est raccourci:

int main()

{
char coup_joue;
while(1)
{
printf("\n");
scanf("%c", &coup_joue);
printf("\nchar = %c", coup_joue);
printf("\nint == %d", coup_joue);
}
return 0;
}


Ici, le résultat:


bash-2.05b$ ./test

a

char = a
int == 97

char =

int == 10



Sans le "while", pas de problème... mais je suis obligé!

Auriez-vous une idée?

Merci,
Zelos
  • # Alors...

    Posté par  . Évalué à 3.

    Il est fortement recommandé de ne pas utiliser les fonctions *scanf. Il vaut mieux utiliser les fonctions type getchar() (me rappelle plus précisément les fonctions, mais google est ton ami...).

    Tapes "problèmes dus à l'utilisation de scanf" dans google, et va voir le premier résultat... Allez, j'suis d'une humeur débonnaire aujourd'hui : http://www.usenet-fr.news.eu.org/fur/comp/lang/faq-c-2.html(...)

    Je te laisse chercher "scanf" dans la page ;-)

    Le problème dans ton cas : tu tapes ta lettre, a en l'occurence, puis entrée derrière pour valider ta saisie.
    Ta lecture d'un %c ne va lire qu'un caractère. Il reste donc dans le buffer d'entrée ton caractère \n, du à la touche entrée. Le code ascii correspondant est... au hasard, 10 ;-).
    Il faut donc soit que tu flushes (vide, mais flush sera bien plus utile sur google) le buffer d'entrée, soit que tu lises "%c\n".

    Pour convertir 'a' => 0, 'b' => 1, ..., tu fais un tolower(coup_joue) pour le forcer en minuscules, des fois que le gars tapes 'A', et tu lui soustrait 'a'.

    int coup_reel;
    coup_reel=tolower(coup_joue)-'a';

    Good luck
    • [^] # Re: Alors...

      Posté par  . Évalué à -1.

      Tiens, salut Krap, comment va ? (on continue sur la messagerie perso si tu veux :)

      Sinon, j'allais réagir sur les mauvaises pratiques à éviter en langage C, mais je suis bien heureux que ce soit quelqu'un que je connais (et toi en particulier) qui m'ait devancé :)

      flure (au cas où tu m'aurais oublié)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.