Mais où est charlie?
Fermé
El roux
-
20 oct. 2007 à 05:17
Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 - 5 févr. 2008 à 20:36
Mahmah Messages postés 496 Date d'inscription lundi 17 septembre 2007 Statut Membre Dernière intervention 22 juin 2010 - 5 févr. 2008 à 20:36
A voir également:
- Mais où est charlie?
- Ou est charlie le livre magique solution ✓ - Forum Loisirs / Divertissements
- Fringe charlie francis retour - Forum Cinéma / Télé
- Ou est charlie jeu app store - Télécharger - Jeux vidéo
- Ou est charlie remonte le temps solution ✓ - Forum Loisirs / Divertissements
- Je suis charlie font ✓ - Forum Graphisme
2 réponses
Mahmah
Messages postés
496
Date d'inscription
lundi 17 septembre 2007
Statut
Membre
Dernière intervention
22 juin 2010
125
5 févr. 2008 à 20:36
5 févr. 2008 à 20:36
Bonjour,
Pour le coup de la répétition à partir de 10 c'est normal.
Ton scanf au début de comparer ne lit qu'un chiffre à la fois (%1d au lieu de %d) donc à partir de 10 il lira 1, comparera, puis, un 0 étant encore dans le buffer d'entrée, il lira ce 0 et refera un tour avant d'attendre une saisie de l'utilisateur.
Lors d'un
Si l'utilisateur entre à la première saisie '1 2 3 4 5 6 0' la boucle fera tous les tours comme si l'utilisateur avait rentré les nombres un par un avec des Enter entre chaque. Sauf qu'il n'y aura qu'une seule saisie.
Pour forcer cela et ne pas prendre en compte tout ce que l'utilisateur peut mettre derrière le premier nombre il faut vider le buffer d'entrée du programme avant le scanf avec un flush( stdin );
Je n'ai pas vraiment regardé le reste du programme mais je pense que juste un %d à la place du %1d peut expliquer les affichages multiples et le toujours "-". Le flush n'est pas obligatoire. (Bienque si l'utilisateur rentre "27 parce que je le vaux bien" cela peut avoir des comportements inattendus)
Accessoirement pour poster du code on peut mettre des balise < code> ... < /code>
Et point de vu conseil je dirais juste une chose certainement un peu futile ici mais bon : séparer la partie interface utilisateur (scanf, printf) du coeur du programme pour avoir par exemple une fonction de comparaison qui... compare, et rien d'autre.
M.
Pour le coup de la répétition à partir de 10 c'est normal.
Ton scanf au début de comparer ne lit qu'un chiffre à la fois (%1d au lieu de %d) donc à partir de 10 il lira 1, comparera, puis, un 0 étant encore dans le buffer d'entrée, il lira ce 0 et refera un tour avant d'attendre une saisie de l'utilisateur.
Lors d'un
do { scanf( "%d", &monInt ); } while ( monInt != 0 );
Si l'utilisateur entre à la première saisie '1 2 3 4 5 6 0' la boucle fera tous les tours comme si l'utilisateur avait rentré les nombres un par un avec des Enter entre chaque. Sauf qu'il n'y aura qu'une seule saisie.
Pour forcer cela et ne pas prendre en compte tout ce que l'utilisateur peut mettre derrière le premier nombre il faut vider le buffer d'entrée du programme avant le scanf avec un flush( stdin );
Je n'ai pas vraiment regardé le reste du programme mais je pense que juste un %d à la place du %1d peut expliquer les affichages multiples et le toujours "-". Le flush n'est pas obligatoire. (Bienque si l'utilisateur rentre "27 parce que je le vaux bien" cela peut avoir des comportements inattendus)
Accessoirement pour poster du code on peut mettre des balise < code> ... < /code>
Et point de vu conseil je dirais juste une chose certainement un peu futile ici mais bon : séparer la partie interface utilisateur (scanf, printf) du coeur du programme pour avoir par exemple une fonction de comparaison qui... compare, et rien d'autre.
M.