Partage
  • Partager sur Facebook
  • Partager sur Twitter

Mettre deux condition en sortie de boucle do while

Utiliser l'opérateur logique "ou"

    13 décembre 2022 à 11:15:43

    Bonjour à toutes et à tous !

    Je suis débutant en C++ et je m'entraine dans l'utilisation des boucles et plus particulièrement la do while qui me donne du fil à retordre.

    Je vous mets mon code et je vous explique.

    #include <string>
    #include <iostream>
    #include <windows.h>
    #include <fstream>
    
    using namespace std;
    
    int main ()
    {
    
    string save
    string phrase
    
    cin >> phrase;
    
    do
    {
    cout << "Souhaitez vous sauvegarder votre phrase ?" << endl;
    cin >> save;
    
    	if (save == "oui")
    		{
    		int savePhrase();
    		{
    			std::ofstream myFile("Phrase.csv", std::ios::app);
    			myFile << phrase << "\n";
    			myFile.close();
    		}
    			cout << "La phrase a ete sauvegarde" << endl;
    		}
    
    		else if (save == "non")
    		{
    			int savePhrase();
    			{
    				std::ofstream myFile("Phrase.csv", std::ios::app);
    				myFile << "Phrase non sauvegardé" << "\n";
    				myFile.close();
    			}
    			cout << "D'accord, je ne sauvegarde pas votre phrase" << endl;
    		}
    
    		else
    		{
    			cout << "Vous devez repondre par oui ou non" << endl;
    		}
    	} while ((save != "non")||(save =! "oui"));
    }



    Le code fonctionne très bien à condition de ne mettre qu'une seule condition de sortie, l'opérateur logique ou "||" ne fonctionne pas et se met en erreur en expliquant qu'il faut utiliser une variable de type boolean... Mais je n'arrive pas du tout à m'en sortir...

    Si quelqu'un à une réponse je suis preneur !!!

    -
    Edité par BenjaminTaupin 13 décembre 2022 à 11:21:25

    • Partager sur Facebook
    • Partager sur Twitter
      13 décembre 2022 à 12:00:51

      Salut,

      Premier point, l'opérateur =! n'existe pas, ce que tu as ecrit est: "J'assigne l'inverse de "oui" à la variable save".

      Ensuite, ta condition de sortie est fausse et génère une boucle infinie. Reformule la en français dans le texte et tu devrais comprendre pourquoi.

      -
      Edité par Deedolith 13 décembre 2022 à 12:02:27

      • Partager sur Facebook
      • Partager sur Twitter
        13 décembre 2022 à 14:45:31

        Deedolith a écrit:

        Salut,

        Premier point, l'opérateur =! n'existe pas, ce que tu as ecrit est: "J'assigne l'inverse de "oui" à la variable save".

        Ensuite, ta condition de sortie est fausse et génère une boucle infinie. Reformule la en français dans le texte et tu devrais comprendre pourquoi.

        -
        Edité par Deedolith il y a environ 1 heure

        Pour le premier point, l'opérateur != ou =! signifie "est différent de..." Non ? ^^

        Et ensuite, par rapport à ma condition de sortie, cela donne en français : "si save est différent de non ou si save est différent de oui" mais du coup si c'est oui ça ne respectera que l'une des conditions et du coup oui cela fera une boucle infinie.

        Mais de toute façon, d'après Microsoft Visual Studio, je ne peux pas mettre d'opérateur logique de type "ou" ou "et" si la variable n'est pas de type boolean donc je suis bloqué dans tous les cas...

        • Partager sur Facebook
        • Partager sur Twitter
          13 décembre 2022 à 14:48:58

          L'opérateur "différent de" c'est "!="

          "=!" n'est pas un opérateur, ce sont deux opérateurs séparés : "=" (affectation) et "!" (négation logique)

          Et ça, Deedolith te l'a dit

          • Partager sur Facebook
          • Partager sur Twitter

          Si vous ne trouvez plus rien, cherchez autre chose.

            13 décembre 2022 à 15:13:15

            dragonjoker a écrit:

            L'opérateur "différent de" c'est "!="

            "=!" n'est pas un opérateur, ce sont deux opérateurs séparés : "=" (affectation) et "!" (négation logique)

            Et ça, Deedolith te l'a dit


            J'ai compris juste après en essayant ^^

            Mais du coup c'est bien ce qu'il à dit, je me retrouve bloqué dans une boucle infinie...

            MAJ - il fallait faire l'inverse 

            while ((save != "non")||(save != "oui"));

            C'est à dire passer de ça à ça :

            while (save == "non"&&"oui");

            Et c'est bon tout fonctionne ! Merci à vous !!


            -
            Edité par BenjaminTaupin 13 décembre 2022 à 15:39:49

            • Partager sur Facebook
            • Partager sur Twitter
              13 décembre 2022 à 17:14:02

              Bonjour,

              Ce serai plutôt:

              while( !( save == "non" || save == "oui" ) );



              • Partager sur Facebook
              • Partager sur Twitter

              Mon site web de jeux SDL2 entre autres : https://www.ant01.fr

                13 décembre 2022 à 17:28:01

                Et ceci?
                while(save != "oui" && save != "non");
                On boucle tant que c'est différent des deux.
                • Partager sur Facebook
                • Partager sur Twitter

                Le Tout est souvent plus grand que la somme de ses parties.

                  13 décembre 2022 à 19:12:12

                  BenjaminTaupin a écrit:

                   "si save est différent de non ou si save est différent de oui"..


                  Les conditions d'arret des boucles while demandent une petite gymnastique intellectuelle ainsi qu'une bonne compréhension de l'algèbre de Boole.

                  Tu Dois arreter de boucler Si save est égale à "oui" Ou Si save est égale à "non".
                  La condition d'arret de la boucle, c'est l'inverse, ce qui implique 2 possibilités:
                  Soit tu garde ta condition en l'etat, et tu l'inverse via l'opérateur non (ce qui n'est pas conventionnel):

                  do
                  {
                  }while(!(save == "oui" || save == "non"))

                  Soit tu appliques l'algèbre de boole (théorème de De Morgan) qui nous dit que:

                  !(A || B) == !A && !B

                  Et tu en déduit le code suivant:

                  do
                  {
                  }while(save != "oui" && save != "non")



                  -
                  Edité par Deedolith 13 décembre 2022 à 19:12:42

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Mettre deux condition en sortie de boucle do while

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown