Problème d'affichage

Résolu/Fermé
milexarc Messages postés 92 Date d'inscription lundi 25 février 2013 Statut Membre Dernière intervention 2 décembre 2016 - 3 déc. 2014 à 19:13
milexarc Messages postés 92 Date d'inscription lundi 25 février 2013 Statut Membre Dernière intervention 2 décembre 2016 - 3 déc. 2014 à 22:44
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

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
3 déc. 2014 à 19:54
Bonjour,
Problème classique de buffer clavier.
Il faut le vider. Utilise un getchar(); après scanf("%f", quantite);
1
milexarc Messages postés 92 Date d'inscription lundi 25 février 2013 Statut Membre Dernière intervention 2 décembre 2016 8
3 déc. 2014 à 20:53
merci ça fonctionne correctement à présent :)
simple curiosité : à quoi sert la fonction getchar() ? et que veux dire buffer claver ?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
3 déc. 2014 à 22:08
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 ;-)
0
milexarc Messages postés 92 Date d'inscription lundi 25 février 2013 Statut Membre Dernière intervention 2 décembre 2016 8
3 déc. 2014 à 22:44
D'accord, merci beaucoup !
0