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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top