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 Christophe Chailloleau-Leclerc . Évalué à 3.
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 Florent C. . Évalué à -1.
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.