2017-10-19 1 views
0

Ich entwickle ein Tic Tac Toe Spiel für die Schule, aber es wird schwierig, eine nette Weise zu entwickeln, ein Spiel vom Keyboard zu lesen, in einer praktischen und netten formated Weg.Wie man von der Tastatur einen vollständigen gelegentlichen Text liest, filtert und wirft

Das ist, was ich tat:

Human::play() const 
{ 
    int pos   
    std::cout << endl << Name << ", please, insert the desirable move:"; 
        //^^this is a class atribute 
    std::string keyboard; 
    std::stringstream ss; 

    std::getline(std::cin, keyboard); 

    ss << keyboard[0]; 
    ss >> pos; 

    return (pos); 
}//end of Human class method *play* 

Diese Funktion aufgerufen wird, und ich werde überprüfen, ob die Spieler bewegen akzeptabel war, also sehen, ob es zwischen 0 und 8 ist. Außerdem würde ich gerne prüfen, ob es einen Eintrag von "r" oder "q" gibt, da dies bedeutet, dass der Spieler eine Runde zurückkommen möchte oder das Spiel beenden möchte.

Um zu überprüfen, ob der Spieler diese Anweisungen geben hatte, ich tun, um diese heißt:

int playermove = player1.play() 
if (playermove == 'q') 
    ... 

ich Probleme mit bin, weil von dem, was oben gezeigt wurde, pos wird 0 zurückgegeben, wenn ein Zeichen eingegeben wird. Aber ich sehe keine praktischen Lösungen.

Können Sie mir bitte Alternativen vorschlagen?

Antwort

0

Sie können nach r und q suchen und bei false nur -48 (wegen ASCII-Tabelle) subtrahieren. diese

Check out:

#include <iostream> 
using namespace std; 

int main() { 
    char tmp; 
    cin >> tmp; 
    if(tmp == 'q') { 
     cout << tmp; 
     return 0; 
    } else { 
     int smth = tmp; 
     cout << smth - 48; 
     return 0; 
    } 
    return 0; 
} 

Dies wird q und Zahlen fangen. Sie können dann überprüfen, ob (smth - 48) im Bereich 0-9 ist, indem Sie (> -48 & & < -39) prüfen.

Verwandte Themen