0
votes

Comment boucler une boucle while en C ++

Je suis nouveau dans la programmation globale et je me demandais comment je pourrais boucler ma boucle while. Je fais une calculatrice et je suis arrivé à une partie où le programme demande si l'utilisateur veut ou non terminer le programme, si l'utilisateur répond "Oui", le programme se terminera; cependant j'ai remarqué que si l'utilisateur répond «Non», le programme continuera simplement à fonctionner et ne posera plus la question. Y a-t-il un moyen de le faire poser à nouveau la question?

  while (response != "Yes" && response != "No") {
        cout << "Would you like to end the program? Yes or No" << endl;
        cin >> response;

        if (response == "Yes") {
            calculator_running = false;
        } else if (response == "No") {
            calculator_running = true;
        } else {
            cout << "Please choose a valid response" << endl;
        }
    }


1 commentaires

Taper «Oui» ou «Non» comme indiqué mettra fin à la boucle. La différence est ce sur quoi vous définissez calculator_running . Il manque un exemple reproductible minimal à cette question. La réponse dépendra de ce que le reste de votre programme fait avec cette variable calculator_running .


3 Réponses :


0
votes

Vous devez mettre le calculator_running à cocher dans la partie while du loopo, quelque chose comme ceci:

calculator_running = true;
while (calculator_running)
...

Attention, une fois que vous entrez " Oui ", cette variable sera mise à false et vous sauterez hors de la boucle.
L'astuce principale avec les boucles while est que vous devez toujours définir la condition sur true, juste avant de démarrer la boucle while.


3 commentaires

Je l'ai mis à vrai au début de mon code, mais ma question est, y a-t-il un moyen de le faire répéter après que quelqu'un a répondu non?


l'utilisation du conditionnel while (calculator_running) se répétera après une entrée "Non" car calculator_running reste vrai dans le chemin où "No" est entré


Vous pouvez toujours utiliser une variable, comme calculator_counter et la définir d'abord sur 3. Votre boucle while vérifie si calculator_counter est égal à zéro, la réponse "Oui" le met à zéro, et la réponse «Non» le réduit simplement de 1 ( calculator_counter-- ).



1
votes

La meilleure pratique consiste à diviser le code en morceaux plus petits pour garder les problèmes séparés.

bool promptYesNo(const std::string& reason)
{
    std::cin.clear(); // clear any error flags on cin
    std::cout << reason << "\nType \"Yes\" or \"No\": ";
    std::string answear;
    while (std::cin >> answear) {
       if (answear == "Yes") return true;
       if (answear == "No") return false;
       std::cout << "Please select \"Yes\" or \"No\": ";
    }
    // here standard input has ended, so terminating application:
    std::exit(1);
}

while (!promptYesNo("Would you like to end the program?")) {
    ...
}

Notez que std :: cin.clear (); vous protégera contre état invalide de std :: cin . C'est probablement la source de vos problèmes. Par exemple, une partie du programme lisait la valeur int , mais vous avez fourni des lettres. Cela définit des indicateurs d'erreur sur cin et toute lecture ultérieure échouera.


0 commentaires

0
votes

J'ai remarqué que si l'utilisateur répond «Non», le programme continuera simplement à fonctionner et ne posera plus la question

C'est ce que vous avez dit au programme de faire!

Si vous ne voulez pas qu'une entrée de "Non" termine la boucle, retirez-la de la condition:

while (calculator_running) {

Ou, utilisez votre booléen, qui est un peu "plus propre" (mais qui a finalement le même effet):

while (response != "Yes") {

0 commentaires