2017-09-14 1 views
-4
bool guess(char c) 
{ 
    if (guesses[c]) 
    { 
     guesses[] = c; 
     return true; 
    } 
    else if (c > ='a' && c <= 'z') 
    { 
     guesses[] = c; 
     return false; 
    } 
} 

bool guesses[255] = {}; 

Ich muss dies verwenden, um zu sehen, ob die Person ein Zeichen zwischen a - z eingegeben haben und wenn sie nicht ich zurückgeben, sonst werde ich falsch zurückgeben. so oder so werde ich auch rates mit dem char aktualisieren. Im Moment verstehe ich nicht, wie man char zum Array hinzufügt, so dass ich das nächste Mal überprüfe, ob es falsch ist und sage ihnen, dass es bereits erraten wurde. Ich verstehe, dass dies die ASCII-Tabelle verwendet, aber darüber hinaus bin ich verloren. Könnte jemand erklären, warum das nicht funktioniert?Simple Word Guessing Spiel

ich zur Zeit den Fehler

erwartet Primärausdruck vor ']'

aber wenn ich umklammern nehmen ich

inkompatiblen Typ char Bool

, die Sinn machen, aber dann, wie mache ich es so machen, wo char c in der Booleschen Array

+0

bedeutet dies sogar kompilieren für dich? *** Vermutungen [] = c; *** –

+0

Was das Array tut 'Bool Vermutungen [255]' darstellen? Was willst du machen, wenn du 'ratess [] = c;'? –

+0

Nein, du antwortest mir nicht. Ich frage nicht nach der wörtlichen Bedeutung einer Codezeile. Ich frage, was das Array darstellt. Und Sie beantworten meine zweite Frage aus demselben Grund nicht zur Klärung. –

Antwort

1

Sie haben bei Ihren Klammern leer, true markieren wird, so dass Sie zur Zeit keinen Index bieten:

guesses[c] = c; 

Aber Sie auch don ‚t wollen die char zu guesses zuweisen, würden Sie wollen ein bool zuweisen:

guesses[c] = true; 

das * kompiliert und Ihr Problem zu beheben.
* Anmerkung Sie auch einen Syntaxfehler mit > =, die ich annehmen, nur eine Kopie + Paste Ausgabe aus dem Editor auf die Frage war, aber man sollte beheben, dass auch >= sein. Ihre Funktion guess kann auch möglicherweise nicht zurück (wenn weder die if oder else if wahr sind), die nicht definiertes Verhalten ist. Sie sollten sicherstellen, dass alle Steuerpfade einen Wert zurückgeben, und Sie sollten sicherstellen, dass Sie mit der höchsten Warnstufe kompilieren, damit Sie über diese Dinge gewarnt werden.

Aber nicht Ihr Design.

Da Sie nur mit Zeichen a-z tun haben, brauchen Sie nicht alle 255 Elemente zuweisen wie Sie. Sie könnten einfach minus dem Charakter der richtigen Index zu erhalten:

bool guesses[26]; 

if (c >='a' && c <= 'z') 
    guesses[c-'a'] = true; 

Betrachten Sie stattdessen einen std::set, einen Behälter mit einzigartigen Elementen, zu verfolgen, ob ein Zeichen gedrückt wurde:

#include <set> 

std::set<char> guesses; 

bool guess(char c) 
{ 
    // Have we already inserted this character? 
    if (guesses.find(c) != std::end(guesses)) 
    { 
     // Character has already been guessed: 
     std::cout << "This character has already been guessed"; 
     return true; 
    } 
    else if (c >= 'a' && c <= 'z') 
    { 
     // Valid guess: 
     guesses.insert(c); 
     return false; 
    } 
}