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
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...
"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
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.
Si vous ne trouvez plus rien, cherchez autre chose.
Mon site web de jeux SDL2 entre autres : https://www.ant01.fr
Le Tout est souvent plus grand que la somme de ses parties.