Problème d'affichage [Résolu/Fermé]

Signaler
Messages postés
92
Date d'inscription
lundi 25 février 2013
Statut
Membre
Dernière intervention
2 décembre 2016
-
Messages postés
92
Date d'inscription
lundi 25 février 2013
Statut
Membre
Dernière intervention
2 décembre 2016
-
Bonjour,

j'ai fait un programme en C.

#include <stdio.h>

int main (void) {

float somme, prix; int quantite; char reponse;

printf("Souhaitez-vous ajouter des articles ? O/N \n"); scanf("%c", &reponse);
somme = 0;

while (reponse == 'O') {
printf("Prix unitaire de l article : "); scanf("%f", &prix);
printf("Quantite achetee : "); scanf("%d", &quantite);
somme = somme + prix*quantite;
printf("Voulez-vous ajouter un autre article ? O/N"); scanf("%c", &reponse);

}
printf("Le montant total de vos achat est de %.2f euros", somme);

return 0;
}

le problème c'est que après avoir entré la quantité, il affiche directement Voulez-vous ajouter un autre article ? O/N. Le montant de vos achat est de .... €

Moi je voudrais que seul la question d'ajout d'une nouvel article apparaisse et que en fonction de la réponse, on recommence la boucle ou on la quitte.

Merci

1 réponse

Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 736
Bonjour,
Problème classique de buffer clavier.
Il faut le vider. Utilise un getchar(); après scanf("%f", quantite);
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63550 internautes nous ont dit merci ce mois-ci

Messages postés
92
Date d'inscription
lundi 25 février 2013
Statut
Membre
Dernière intervention
2 décembre 2016
7
merci ça fonctionne correctement à présent :)
simple curiosité : à quoi sert la fonction getchar() ? et que veux dire buffer claver ?
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 736
Lorsque l'utilisateur saisit une information (cas du scanf() par exemple), les données qui n'ont pas pu être lues seront stockées dans un une "tableau" (buffer clavier). Ainsi la prochaine fois qu'une lecture sera faite, la fonction lira d'abord dans le buffer clavier pour récupérer les informations. S'il est vide, alors l'utilisateur pourra saisir à nouveau des informations.
Dans ton cas, tu as fait : scanf("%f",&quantite); Lorsque l'utilisateur tape 5. Il y aura 5.0f qui ira dans la variable quantite. Et '\n' (touche entrée) qui ira dans le buffer clavier. Ensuite tu fais un scanf("%c",&reponse); La fonction lit le '\n' du buffer clavier. Donc reponse='\n'. D'où ton comportement. L'idée est donc de vider le buffer. Pour cela, il suffit d'utiliser des fonctions de lecture. Par exemple : getchar() (cela lit un caractère) récupérera le '\n'. Et tout rentre dans l'ordre.
Pour faire propre, il faudrait vider le buffer clavier avec un while((c=getchar()=!=EOF && c!='\n'); mais on ne va pas compliquer les choses ;-)
Messages postés
92
Date d'inscription
lundi 25 février 2013
Statut
Membre
Dernière intervention
2 décembre 2016
7
D'accord, merci beaucoup !