Hét vraag- en antwoordplatform van Nederland

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;
}
}

Verwijderde gebruiker
12 jaar geleden
808

Heb je meer informatie nodig om de vraag te beantwoorden? Reageer dan hier.

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.
(Lees meer...)
Cryofiel
12 jaar geleden
Verwijderde gebruiker
12 jaar geleden
Klopt!! Maar wat is het type van answerD? Krijg je zo niet een pointer-compare die altijd false is?
Cryofiel
12 jaar geleden
Verdraaid, je hebt helemaal gelijk! Ik ben duidelijk al te lang uit het actieve programmeren... Ik zal meteen een toevoeging schrijven op mijn antwoord!

Weet jij het beter..?

Het is niet mogelijk om je eigen vraag te beantwoorden Je mag slechts 1 keer antwoord geven op een vraag Je hebt vandaag al antwoorden gegeven. Morgen mag je opnieuw maximaal antwoorden geven.

0 / 5000
Gekozen afbeelding