Waarom bugt mijn C++ script?

Ik heb een C++ script geschreven voor een soort simpel text-based spel. maar mijn void D, die dus vakje D op de map voorstelt werkt niet goed. zodra deze void wordt gebruikt blijft hij het do-while stuk herhalen ook al is mijn invoer bij answerD yes. Weet één van jullie waar de fout zit?

CodeBlocks geeft geen errors tijdens het builden van dit script:

void D(){
cout << "You are in front of your door" << endl;
if(unlockeddoor==false){
do{
cout << "Would you like to open it? - Yes or no?" << endl;
cin >> answerD;
}while(answerD != "Yes"||"yes"||"y"||"No"||"no"||"n");
}
if (answerD == "Yes"||"yes"||"y"){
search = "Key (house)";
inventoryFind();
if(inventoryFind() == true){
unlockeddoor = true;
}
else{
cout << "You do not have the key to open the door, you will have to find the key." << endl;
cout << "You can only go to the south" << endl;
do{cin >> direction;}while(direction != "south"||"South"||"inventory");
}
}
if(unlockeddoor==true){
cout << "You can outside, to the north. and in your house, to the south."<< endl;
cout << "Where'd you like to go?";
cin >> direction;
}
}

Weet jij het antwoord?

/2500

Het beste antwoord

Je fout zit in de logische OR (||). Die heeft een lage prioriteit.     answerD != "Yes"||"yes"||"y"||"No"||"no"||"n" wordt daardoor gezien als     (answerD != "Yes") || "yes" || "y" || "No" || "no" || "n" Ongeacht wat answerD is, de tweede term ("yes") zal altijd naar 'true' worden omgezet; dit omdat in C++ alles wat niet 0 is, 'true' wordt. Jouw do...while wordt dus altijd gezien als     do ... while (true) Vandaar dat je een oneindige lus hebt gemaakt.     Toegevoegd na 1 minuut:   Oplossing: verander bovenstaande in while (answerD != "Yes" && answerD != "yes" && answerD != "y" && answerD != "No" && answerD != "no" && answerD != "n") Trouwens, ik zou ook de mogelijkheden "Y" en "N" nog meenemen.   Toegevoegd na 1 dag:   Zoals tonb terecht opmerkt in zijn reactie, is het type van answerD waarschijnlijk een char* of een gestructureerd type zoals een string. Die kun je helemaal niet met == of met != vergelijken: dan krijg je inderdaad een pointervergelijking! Je zult gebruik moeten maken van strcmp(answerD, "Yes") en dergelijke om het gewenste resultaat te krijgen.

Stel zelf een vraag

Ben je op zoek naar het antwoord die ene vraag die je misschien al tijden achtervolgt?

/100