Langage C probleme boucle
Fermé
jeremy08
-
19 nov. 2011 à 15:12
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 19 nov. 2011 à 17:54
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 19 nov. 2011 à 17:54
A voir également:
- Langage C probleme boucle
- Langage ascii - Guide
- Langage binaire - Guide
- Pascal langage - Télécharger - Édition & Programmation
- Langage pascal - Télécharger - Édition & Programmation
- Xiaomi s'éteint tout seul et se rallume en boucle - Forum Xiaomi
1 réponse
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
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'