[gelöst]Abfrage auf Buchstaben ?!



  • Hallo Leute,

    folgendes Problem...
    Ich hab ein 10x10 gefülltes Array von A0 - A9 & J0 - J9
    Wenn ich den Benutzer auffordere eine Koordinate einzutippen und er was richtig eintippt, funktioniert alles,
    doch wenn er nur "asdfghjk" oder nur "a" eintippt stürzt das Programm ab...

    Das Problem Kind

    bool Mensch::angriff(Spielfeld* gegFeld)
    {
    	int zeile, spalte;
    	string input;
    	bool getroffen = false;
    	bool gewonnen= false; 
    
    	do 
    	{
    
    	cout << "Sie sind dran!" << endl;
    	// koordinaten eingabe (zeile, spalte)
    	getkoord("Waehlen Sie eine Koordinate", &zeile, &spalte);
    	system("cls");
    	// prüfe ob getroffen
    	getroffen = gegFeld->getroffen(zeile, spalte);
    	gegFeld->draw();
    
    	if (getroffen)
    	{
    		if(gegFeld->gewonnen())
    		{
    			cout<< "Sie haben gewonnen!"<< endl;
    			gewonnen= true;
    		}
    		else
    		{
    		cout <<"Sie duerfen nochmal"<< endl;
    		}
    	}
    	else
    	{
    		cout <<"Sie haben nichts getroffen"<< endl;
    		cout <<"Der Computer ist jetzt dran" <<endl;
    	}
    	}while(getroffen && !gewonnen);
    
    	return gewonnen;
    }
    

    Und dazu gehört

    void Mensch::getkoord(string text, int* zeile, int* spalte)
    {
    	string input;
    	cout << text << endl;
    	cin >> input;
    	*zeile = getzeile(input);
    	*spalte = getspalte(input);
    }
    //_________________________________________________________________________________________________
    
    char Mensch::getrichtung()
    {
    	string input;
    	cout <<"rechts, links, oben, unten"<<endl;
    	cin >> input;
    	return input[0];
    }
    //_________________________________________________________________________________________________
    
    int Mensch::getzeile(string input)
    {
    	if(input[0]<'a')
    	{
    	return input[0] - 'A';
    	}
    	else
    	{
    		return input[0] - 'a';
    	}
    }
    

    Wo muss ich das jetzt mit der "If Abfrage" einfügen? Und gibt es sowas wie "Wenn das eingegebende nicht mit dem feld inhalt übereinstimmt"

    - Nicht wundern über den Inhalt, ist alles noch in der Testphase 😛



  • Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET in das Forum C++ (auch C++0x und C++11) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Scheinbar weiss niemand, was jetzt das konkrete Problem ist.

    meinhana schrieb:

    Ich hab ein 10x10 gefülltes Array von A0 - A9 & J0 - J9

    Dein Feld sieht so aus?

    A0 A1 A2...A9
    J0
    J1
    J2
     .
     .
     .
    J9
    

    Was genau willst Du hier machen? Bzw.: wie sieht ein richtiger input fuer diese Funktion aus?
    z.B. "A0" oder "a7", aber nicht "asdf" oder "a"?

    int Mensch::getzeile(string input)
    {
        if(input[0]<'a')
        {
        return input[0] - 'A';
        }
        else
        {
            return input[0] - 'a';
        }
    }
    


  • Sofern du die Nerven dazu hast, schau dir mal <regex> an.

    Beispielcode:

    if (std::tr1::regex_match(string.c_str(), std::tr1::regex("([0-9]+)")))
    

    (ist jetzt nicht der sauberste Code, also bitte verzeihen.. kannst auch auf spezifische Buchstaben usw überprüfen..



  • Also ich verstehe das Problem immer noch nicht, was ist überhaupt gewollt/erwartet und was passiert oO ?!

    Das sollte der TE mal klären...



  • Naja, das Problem ist, dass ich eine Koordinate haben will, also "A0" -> klappt alles, doch wenn ich "a" oder nur "0" eingebe, stürzt das problem ab...



  • Du brauchst etwas in der Art:

    void Mensch::getkoord(string text, int* zeile, int* spalte)
    {
        string input;
        cout << text << endl;
        bool eingabeOkay = true;
    
        do
        {
           cin >> input;
           if(input.size() != 2)
           {
              eingabeOkay = false;
           }
           else
           {
              if(input[0] >= 'a' && input[0] <= 'j' &&
                 input[1] >= '0' && input[1] <= '9')
                   ; //alles gut
              else
                 eingabeOkay = false;
           }
         }while(!eingabeOkay);
    
        *zeile = getzeile(input);
        *spalte = getspalte(input);
    }
    


  • Genauuu 🙂
    Mal gucken obs klappt ^^ ❤



  • geht nicht.



  • wiesooooooooo
    ne fehlermeldung des compilers wäre schon bisschen besser als "geht nicht"



  • Der boolsche Wert muss in der Schleife initialisiert werden:

    void Mensch::getkoord(string text, int* zeile, int* spalte)
    {
        string input;
        cout << text << endl;
        bool eingabeOkay;
    
        do
        {
           eingabeOkay = true;
           cin >> input;
           if(input.size() != 2)
           {
              eingabeOkay = false;
           }
           else
           {
              if(input[0] >= 'a' && input[0] <= 'j' &&
                 input[1] >= '0' && input[1] <= '9')
                   ; //alles gut
              else
                 eingabeOkay = false;
           }
         }while(!eingabeOkay);
    
        *zeile = getzeile(input);
        *spalte = getspalte(input);
    }
    


  • Das mit dem "geht nicht" hab ich nicht geschrieben !



  • Ich denke zwar, dass ich gerade auf dem Schlauch stehe und die Problematik nicht sehe aber ich poste dennoch mal:

    bool GetCoord(std::string const& Str, unsigned& X, unsigned& Y)
    {
        if(Str.size() != 2)
            return false;
        if(!(Str[0] >= 'A' && Str[0] <= 'J' || Str[0] >= 'a' && Str[0] <= 'j'))
            return false;
        if(!(Str[1] >= '0' && Str[1] <= '9'))
            return false;
        X = Str[0] - (Str[0] >= 'a' ? 'a' : 'A');
        Y = Str[1] - '0';
        return true;
    }
    

    Und hier das Anwendungsbeispiel:
    http://ideone.com/fZvTDh



  • Die Antwort von Belli hat funktioniert! Hab noch ein cout eingefügt und alles klasse 🙂
    Danke 👍


Anmelden zum Antworten