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
Geef jouw antwoord
0 / 2500
Geef Antwoord

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.
Cryofiel
12 jaar geleden
Deel jouw antwoord
0 / 2500
Geef Antwoord
logo van Kompas Publishing

GoeieVraag.nl is onderdeel van Kompas Publishing