kein Fehler, aber immer die ist die Bedingung falsch.



  • Mal wieder habe ich ein Problem mit dem Spiel Zahlenraten aus C++ für Spieleprogrammierer von Heiko Kalista. Dieses Spiel erweitere ich selbstständig, Stück für Stück. Nun wollte ich eine Multiplayer Funktion einbauen.
    Hier erstmal der Quelltext:

    int zweiSpieler (char beginnenderSpieler[12])
    {
    	//NamensAbfrage
    	char Spieler1[12];
    	char Spieler2[12];
    
    	cout << "\nBitte gebe den Namen des 1.Spielers ein (max. 10 Zeichen): ";
    	cin.ignore ();
    	cin.get (Spieler1, 11); 
    	cout << "Bitte gebe den Namen des 2.Spielers ein (max. 10 Zeichen): ";
    	cin.ignore ();
    	cin.get (Spieler2, 11);
    
    	//SpieleAnzahl
    	int SpieleAnzahl = 1;
    
    	cout << "\nWie viele Spiele wollt ihr spielen? (1, 2) ";
    	cin >> SpieleAnzahl;
    
    	if (SpieleAnzahl == 1) //ein zweiSpieler Spiel
    	{
                    //Abfrage des beginnendenSpielers
    		cout << "Der/die Juengere beginnt. Wer ist juenger?(Name) ";
    		cin.ignore ();
    		cin.get (beginnenderSpieler, 11);
    
    		if (beginnenderSpieler == Spieler1)
    		{
    			beginnenderSpieler = Spieler1;
    
    			MultiplayerSpiel ();
    		}
    		else if (beginnenderSpieler == Spieler2)
    		{
    			beginnenderSpieler = Spieler2;
    
    			MultiplayerSpiel ();
    		}
    		else
    		{
    			cout << "\nFalsche Eingabe, Name nicht bekannt.\n" << endl;
    		}
    
    	}
    

    Mein Complimierer zeigt keinen Fehler. Doch wenn ich das Programm starte und zu der Abfrage des beginnendenSpielers komme sagt das Spiel jedes mal, dass der Name nicht bekannt ist, obwohl ich genau den gleichen Namen wie oben genommen habe.
    Ich habe auf der suche nach meinem Fehler auch schon nach der Eingabe wer jünger ist mir beide Namen ausgeben lassen und sie waren genau gleich. 😕
    Wahrscheinlich bin ich nur zu blind es zu sehn, aber ich hab gestern die halbe Nacht vor dem Computer verbracht und einfach keinen Fehler gefunden.
    Vielen Dank schon mal!



  • beginnenderSpieler == Spieler1
    

    So kannst du deine Char-Arrays nicht vergleichen. Du musst jedes einzelne element vergleichen.
    Oder mit der funktion strcmp
    Guck hier:
    http://www.cplusplus.com/reference/clibrary/cstring/strcmp/



  • Am besten nimmt man aber gleich eine String, dann klappt auch ==.



  • mit der Funktion strcmp funktionierts, danke.
    aber was meinst du, knivil, mit einem string wie würde das gehn?



  • Sarisma schrieb:

    aber was meinst du, knivil, mit einem string wie würde das gehn?

    Strings überladen den Vergleichsoperator (==), so dass du zwei Strings einfach auf lexikalische Gleichheit überprüfen kannst.

    std::string first = "Hallo";
    std::string second = "Hallo";
    
    if (first == second) { /* Funktioniert! */ }
    

    Wenn die String-Klasse in deinem Buch noch nicht vorkam, dann taugt dein Buch nichts.



  • Wenn die String-Klasse in deinem Buch noch nicht vorkam, dann taugt dein Buch nichts.

    Doch sie wurden kurz angeschnitten, aber es wird nirgends gezeigt ob man strings auch einfach, im Spiel, über die Tastatur beschreiben kann, geht das? Und kann ein String als Parameter übergeben werden? ich hab das jetzt mal ausprobiert wahrscheinlich total falsch denn bei mir gibts sofort ne menge Fehlermeldungen.

    int zweiSpieler (string beginnenderSpieler)
    {
    	//NamensAbfrage
    	string Spieler1;
    	string Spieler2;
    
    	cout << "\nBitte gebe den Namen des 1.Spielers ein (max. 10 Zeichen): ";
    	cin >> Spieler1; 
    	cout << "Bitte gebe den Namen des 2.Spielers ein (max. 10 Zeichen): ";
    	cin >> Spieler2;
    
    	//SpieleAnzahl
    	int SpieleAnzahl = 1;
    
    	cout << "\nWie viele Spiele wollt ihr spielen? (1, 2) ";
    	cin >> SpieleAnzahl;
    
    	if (SpieleAnzahl == 1) //ein zweiSpieler Spiel
    	{
    		cout << "Der/die Juengere beginnt. Wer ist juenger?(Name) ";
    		cin >> beginnenderSpieler;
    
    		if (Spieler1 == beginnenderSpieler)
    		{
    			beginnenderSpieler = Spieler1;
    
    			MultiplayerSpiel ();
    		}
    		else if (Spieler2 == beginnenderSpieler)
    		{
    			beginnenderSpieler = Spieler2;
    
    			MultiplayerSpiel ();
    		}
    		else
    		{
    			cout << "\nFalsche Eingabe, Name nicht bekannt.\n" << endl;
    		}
    


  • Tastatureingabe Stichwort: std::getline .
    Und ja, auch ein std::string kann Parameter einer Funktion sein.



  • jetzt funktioniert das mit dem vergleichen nicht
    Fehlermeldung: error C2678: Binärer Operator '==': Es konnte kein Operator gefunden werden, der einen linksseitigen Operanden vom Typ 'std::string' akzeptiert (oder keine geeignete Konvertierung möglich)

    und noch ganz viele andre Fehler



  • Bindest du auch den entsprechenden Header ein?



  • Sarisma schrieb:

    jetzt funktioniert das mit dem vergleichen nicht
    Fehlermeldung: error C2678: Binärer Operator '==': Es konnte kein Operator gefunden werden, der einen linksseitigen Operanden vom Typ 'std::string' akzeptiert (oder keine geeignete Konvertierung möglich)

    und noch ganz viele andre Fehler

    #include <string>
    


  • Kauf dir lieber ein anständiges Buch, z.B. den C++ Primer.



  • Ja ich glaub auch, dass ich mir ein andres Buch kaufen sollte.
    Also den Header hab ich natürlich vergessen.
    Aber ich glaub ich mach was mit der eingabe falsch:

    cout << "Der/die Juengere beginnt. Wer ist juenger?(Name) ";
    cin.ignore ();
    cin.getline (beginnenderSpieler);
    


  • Sarisma schrieb:

    Ja ich glaub auch, dass ich mir ein andres Buch kaufen sollte.
    Also den Header hab ich natürlich vergessen.
    Aber ich glaub ich mach was mit der eingabe falsch:

    cout << "Der/die Juengere beginnt. Wer ist juenger?(Name) ";
    cin.ignore ();
    cin.getline (beginnenderSpieler);
    

    std::getline ist nicht das Gleiche wie std::cin.getline() !



  • ok wie geht das dann nur mit getline?

    cout << "Der/die Juengere beginnt. Wer ist juenger?(Name) ";
    getline (beginnenderSpieler);
    

    so einfach is es nicht, stimmts?



  • Ich könnte das natürlich jetzt einfach hier hinposten. Besser wäre es aber, wenn Du entweder eine Suchmaschine Deiner Wahl bemühst und es Dir selbst erarbeitest oder (besser) Dir ein gutes Buch kaufst und damit lernst.

    Wenn wir es Dir vorkauen, führt das zwar zu einer schnellen Lösung, nur wird dann der Lerneffekt nicht sehr groß ausfallen...

    PS: Eine gute Anlaufstelle für Fragen zur Standardbibliothek ist das hier.
    Dort wirst Du unter Strings library fündig.



  • ok danke das Buch werde ich heut noch bestellen und dann scuh ich jetzt halt mal. 🙂



  • Hi,

    das getline ist für Strings und cin.getline ist für CStrings. So wie ich das bis jetzt gelernt habe wird in C++ immer mit Strings gearbeitet und nur wenn es nicht anders geht auf CString zurückgegriffen.
    Strings sind einfach nicht so fehleranfällig und haben als Objekte auch nette Funktionalitäten, korrigiert mich wenn ich hier Mist erzähle.

    G hibbes



  • ich habe in

    Tachyon schrieb:

    Eine gute Anlaufstelle für Fragen zur Standardbibliothek ist das hier.
    Dort wirst Du unter Strings library fündig.

    gesucht und das mit der Eingabe hinbekommen und verstanden, doch jetzt bin ich total verwirrt, denn vorher hat das mit dem Vergleichen funktioniert jetzt nicht mehr das gleiche Problem wie am Anfang nur das ich jetzt halt strings dastehen habe.
    Dazu finde ich auch nicht in der Biblothek eine Lösung.
    Da ich ansonsten den ganzen Tag an nichts anderes denken kann, bitte ich hoffentlich das letzte Mal um eine "schnelle Lösung", auch auf die Gefahr hin das ich nichts lerne. 😉



  • Der neue Quelltext wäre hilfreich.



  • Hier ist der Quelltext, wie gesagt das gleiche Problem wie ganz am Anfang.

    int zweiSpieler (string beginnenderSpieler)
    {
    	//NamensAbfrage
    	string Spieler1;
    	string Spieler2;
    
    	cout << "\nBitte gebe den Namen des 1.Spielers ein (max. 10 Zeichen): ";
    	cin.ignore ();
    	getline (cin,Spieler1); 
    	cout << "Bitte gebe den Namen des 2.Spielers ein (max. 10 Zeichen): ";
    	cin.ignore ();
    	getline (cin,Spieler2); 
    
    	cout << "\nDer/die Juengere beginnt. Wer ist juenger?(Name) ";
    	cin.ignore ();
    	getline (cin,beginnenderSpieler);
    
    	if (Spieler1 == beginnenderSpieler)
    	{
    		beginnenderSpieler = Spieler1;
    	}
    	else if (Spieler2 == beginnenderSpieler)
    	{
    		beginnenderSpieler = Spieler2;
    	}
    	else
    	{
    		cout << "\nFalsche Eingabe, Name nicht bekannt.\n" << endl;
    	}
    
    	return 0;
    

Anmelden zum Antworten