2016-09-03 5 views
0
#include "stdafx.h" 
#include <iostream> 
#include <string> 

void WorldBuilder(); 
bool Acceptor(); 

int main() 
{ 
bool IsAcceptable = (false); 

while (IsAcceptable == (false)) 
    { 
     WorldBuilder(); // build world 
      IsAcceptable = Acceptor(); 
    } 
    return 0; 
} 

// Builds the world 
void WorldBuilder() 
{ 
std::cout << "Building World...\n"; 
return; 
} 

bool Acceptor() 
    { 
     std::cout << "Is world build acceptable? (y/n) "; 
     std::string qIsAcceptable = ""; 
     std::cin >> qIsAcceptable; 

if (qIsAcceptable[1] == 'y') 
    { 
     return (true); 
    } 
else if (qIsAcceptable[1] == 'n') 
    { 
     return (false); 
    } 

} 

Wenn ich debuggen es aus dem Elses geht, ohne die isAcceptable boolean verändert und geht zurück auf Worldbuilder() und boolean Fahrten auf true was die Eingabe.Ich habe Probleme mit einem boolean Acceptor

Ich habe das Gefühl, dass es etwas geben muss, was ich über Booleans nicht verstehe.

+0

Ich empfehle einen Debugger oder Cout-Anweisungen, um die Werte der Variablen in Ihrem Code zu sehen. –

Antwort

1

Wechsel:

if (qIsAcceptable[1] == 'y') 
    { 
     return (true); 
    } 
else if (qIsAcceptable[1] == 'n') 
    { 
     return (false); 
    } 

zu

if (qIsAcceptable[0] == 'y') 
    { 
     return (true); 
    } 
else if (qIsAcceptable[0] == 'n') 
    { 
     return (false); 
    } 

C/C++ Array arithmetics beginnt von 0, nicht 1.

+0

Schön. Ich wusste, dass es etwas wirklich Grundlegendes gab, das ich vermisste, aber ich war mir nicht sicher, was es war. Danke für die Hilfe. –

+0

@ BrendanSleanbeck Kein Problem! –

0

In dieser Funktion

bool Acceptor() 
{ 
    std::cout << "Is world build acceptable? (y/n) "; 
    std::string qIsAcceptable = ""; 
    std::cin >> qIsAcceptable; 

    if (qIsAcceptable[1] == 'y') 
    { 
     return (true); 
    } 
    else if (qIsAcceptable[1] == 'n') 
    { 
     return (false); 
    } 

} 

Sie sind die Zeichen für die falsche Art und Weise zu überprüfen. Array-Subscripting beginnt bei null, nicht bei eins. Ihr Code sollte jetzt sein:

#include <cctype> 
//.... 
bool Acceptor() 
{ 
    std::cout << "Is world build acceptable? (y/n) "; 
    char qIsAcceptable = 'b'; 
    std::cin >> qIsAcceptable; 

    if (std::tolower(qIsAcceptable) == 'y') 
    { 
     return true; 
    } 
    else if (std::tolower(qIsAcceptable) == 'n') 
    { 
     return false; 
    } 

} 

Auch, wenn Sie bemerkt haben, ich entfernt die Klammern um (true) und (false). Sie werden nicht benötigt, also sollten Sie sie entfernen. Ich habe auch Änderungen an meinem Code hinzugefügt, die Sie sehen können, wenn Sie möchten. Einer konvertiert die Benutzereingabe in ein Zeichen und der nächste prüft alle Möglichkeiten mit std::tolower. Siehe oben.

+0

Warum der Downvote zu meiner Antwort? –

+0

Wenn es hier irgendwelche Fehler gibt, können Sie darauf hinweisen! –