Langage C probleme boucle
Fermé
jeremy08
-
19 nov. 2011 à 15:12
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 19 nov. 2011 à 17:54
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 19 nov. 2011 à 17:54
A voir également:
- Langage C probleme boucle
- Langage ascii - Guide
- Boucle cmd - Forum Programmation
- Le fichier contient un programme écrit en python. le programme construit un mot secret mais il ne l'affiche pas. modifiez ce programme afin que à chaque itération de la boucle : la variable a augmente de 2 la variable b diminue de 1 ajoutez une instruction pour faire afficher le mot secret construit. quel est ce mot secret ? ✓ - Forum Python
- Débuter langage batch windows - Guide
- Mon pc s'allume et s'éteint en boucle ✓ - Forum Matériel & Système
1 réponse
KX
Messages postés
16733
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 janvier 2024
3 014
19 nov. 2011 à 15:20
19 nov. 2011 à 15:20
Lorsque tu entres 'o' dans ton scanf tu appuies ensuite sur la touche entrée, donc en fait c'est comme si tu avais entré 'o\n' du coup ça se passe bien pour le premier tour de boucle car rep=='o' mais après tu vas avoir rep=='\n' et donc quitter ta boucle while.
Tu vas avoir le même problème si tu au lieu d'entrer 'o' tu tapes "oui", tu vas avoir 'o', puis 'u', puis 'i' puis '\n'
Pour s'en sortir tu pourrais faire un scanf("%s",char* ligne) et faire rep=ligne[0], tu auras alors uniquement le premier caractère de ta ligne, pas la suite...
Tu vas avoir le même problème si tu au lieu d'entrer 'o' tu tapes "oui", tu vas avoir 'o', puis 'u', puis 'i' puis '\n'
Pour s'en sortir tu pourrais faire un scanf("%s",char* ligne) et faire rep=ligne[0], tu auras alors uniquement le premier caractère de ta ligne, pas la suite...
19 nov. 2011 à 15:34
19 nov. 2011 à 15:45
19 nov. 2011 à 15:49
Oui. Mais le problème est que les autres caractères seront stockés dans le buffer clavier. Et c'est ce même buffer qu'interrogera les fonctions lecture (getchar, scanf, ...) au prochain tour.
Le mieux est de faire une fonction spécifique pour vider le buffer clavier. Mais, ici un simple getchar suffira (à condition de ne pas taper "oui" au lieu de "o").
Cdlt,
19 nov. 2011 à 15:51
19 nov. 2011 à 15:54
Une exécution possible est celle-ci :
Dans ce code je récupère bien un caractère à la fois, mais ma boucle va tous les récupérer les uns à la suite des autres, y compris le \n (ASCII=10)
Dans ton code c'est pareil, tu vas demander un caractère et tu vas bien récupérer 'o' la première fois, mais lors du deuxième scanf tu vas récupérer le reste de la ligne, par exemple le '\n' et c'est pour ça que ta boucle while s'interrompt. parce que rep!='o'