kein Fehler, aber immer die ist die Bedingung falsch.
-
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 einstd::stringkann 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::getlineist nicht das Gleiche wiestd::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;
-
Du brauchst echt ein Buch.
Du musst string als Referenz übergeben, sonst hast Du innerhalb der Funktion nur eine Kopie des übergebenen String-Objekts und nicht das übergebene String-Objekt selbst.int zweiSpieler (string & beginnenderSpieler) //hier fehlte das & { //NamensAbfrage string Spieler1; string Spieler2; cout << "\nBitte gebe den Namen des 1.Spielers ein (max. 10 Zeichen): "; //cin.ignore (); braucht man nicht getline (cin,Spieler1); cout << "Bitte gebe den Namen des 2.Spielers ein (max. 10 Zeichen): "; //cin.ignore (); braucht man nicht getline (cin,Spieler2); cout << "\nDer/die Juengere beginnt. Wer ist juenger?(Name) "; //cin.ignore (); braucht man nicht 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;
-
Hi, sag mal stehe ich total auf dem Schlauch oder machen die verzweigten Bedingungen gar keinen Sinn, bis auf zu testen ob der Name vorhanden ist???
Wenn ein Wert gleich dem Anderen ist, macht es dann Sinn den Anderen nochmals den Wert zuzuweisen???
if (Spieler1 == beginnenderSpieler) { beginnenderSpieler = Spieler1; // is doch schon gleich??? } else if (Spieler2 == beginnenderSpieler) { beginnenderSpieler = Spieler2; // is doch auch gleich??? }G hibbes
-
Danke, ich sehs ein mein Buch bringt nichts. Das stand da nirgends.
-
hibbes schrieb:
Hi, sag mal stehe ich total auf dem Schlauch oder machen die verzweigten Bedingungen gar keinen Sinn, bis auf zu testen ob der Name vorhanden ist???
Wenn ein Wert gleich dem Anderen ist, macht es dann Sinn den Anderen nochmals den Wert zuzuweisen???
if (Spieler1 == beginnenderSpieler) { beginnenderSpieler = Spieler1; // is doch schon gleich??? } else if (Spieler2 == beginnenderSpieler) { beginnenderSpieler = Spieler2; // is doch auch gleich??? }G hibbes
das ist ja nur eine Funktion und es soll klar gemacht werden das später im Programm beginnenderSpieler später Spieler1 oder Spieler2 ersetzt.