Comment nettoyer le tampon avant scanf
Question
J'écris le code d'un programme qui lit un choix d'entrée de l'utilisateur et en fonction de cela, il calcule (surface, circonférence, volume ou sortie)
#include<stdio.h>
int main(void)
{
double radius=0.0;
double area=0.0;
double volume=0.0;
double height=0.0;
double circumference=0.0;
const double pi=13.459820934;
char choice;
do
{
printf("Choose what you want to do : \n"
"Calculate Area A\n"
"Calculate Circumference C\n"
"Calculate Volume V\n"
"Quit Q\n");
/*scanf("%c",&choice);*/
choice=getchar();
printf("please enter radius : ");
scanf("%lf",&radius);
if(choice=='V')
{
printf("please enter height : ");
scanf("%lf",&height);
}
area = pi * radius * radius;
volume = height * area;
circumference = 2 * pi * radius;
switch (choice)
{
case 'A':
printf("Area = %lf\n\n",area);
break;
case 'V':
printf("Volume = %lf\n\n",volume);
break;
case 'C':
printf("Circumference = %lf\n\n",circumference);
break;
default:
printf("Not a good answer !!\n\n");
}
}while(choice!='Q');
return 0;
}
quand j'exécute le programme, cela a bien fonctionné pour la première boucle do mais après avoir réimprimé les choix alors qu'il commence la boucle pour la deuxième fois, il n'a pas attendu que je rentre mon choix, il a directement imprimé "veuillez entrer le rayon"
lorsque j'ai débogué le programme, j'ai découvert qu'il y avait « » dans le choix lorsqu'il a commencé la boucle pour la deuxième fois, comment puis-je supprimer ce « » à chaque boucle ?Je savais que ce ' ' résultait de la lecture du choix de l'utilisateur suivi de la première exécution de la boucle, mais je ne sais pas pourquoi le choix est supprimé du choix alors qu'il ne l'était pas ?
J'ai essayé d'initialiser le choix avant d'afficher les choix à l'utilisateur mais le même problème s'est produit
une aide s'il vous plaît ?Merci d'avance
La solution
Le \n
le personnage est abandonné par le scanf
appeler après avoir appuyé sur Entrer clé .Tu dois consommer ça \n
avant la prochaine itération, sinon ceci \n
le personnage sera lu d'ici la prochaine fois scanf
ou getchar
.
Utilisez l'extrait
int ch;
while((ch = getchar()) != EOF || ch != '\n');
juste avant l'accolade fermante }
de do-while
ou après la deuxième scanf
.