3tiXoz Geschrieben 20. August 2010 Geschrieben 20. August 2010 Hi, ich will ein Programm schreiben, dass erst Abfragt wie viele Spieler mitspielen (Es geht um Dart). Die Eingabe ist begrenzt von 1 bis 4 Spieler. Danach sollen die Namen der Spieler abgefragt werden und genau hier fängt mein Problem an. Ich habe zuerst eine Struktur angelegt S_Spieler mit den Variablen int Punkte und char Name[30]; Wenn ich das Programm starte kann ich jedoch keine Namen eingeben. Das Programm geht in einem durch nachdem man die Anzahl der Spieler eingegeben hat. Hier der Quellcode: #include <iostream> using namespace std; int main() { // Spieler Struktur struct S_Spieler { int Punkte; char Name[30]; }; // Variablen S_Spieler Spieler[4]; int iAnzSpieler = 0; // Spieler abfragen do { cout << "Wie viele Spieler: "; cin >> iAnzSpieler; } while (iAnzSpieler > 4 || iAnzSpieler < 1); for(int i = 0; i<iAnzSpieler; i++) { Spieler[i].Punkte = 501; cout << "Spieler " << i+1 << endl; cout << "Dein Name: "; cin.get (Spieler[i].Name, 29); } return 0; } Über eine Antwort wär ich sehr dankbar, denn ich komme da irgendwie nicht weiter... Das Programm an sich soll die Punkte von 501 auf 0 zählen. So das man bei nicht elektronischen Dartscheiben nicht selber zählen muss^^ Jeder Spieler gibt also nach seinen 3 Würfen seine erzielte Punktzahl ein und das Programm Subtrahiert diese dann von der zuletzt eingespeicherten Gesamtzahl. Gruss 3tiXoz Zitieren
Klotzkopp Geschrieben 20. August 2010 Geschrieben 20. August 2010 Hat es einen bestimmten Grund, dass du char-Arrays benutzt, und nicht std::string? Zitieren
chooter696 Geschrieben 21. August 2010 Geschrieben 21. August 2010 (bearbeitet) dein problem liegt bei cin.get() dies ließt aus dem Tastatur Puffer das letzte Zeichen ein. Hier ist das ein Enter womit er sofort weiter springt. Edit: nutze einfach cin>>Spieler.Name; Bearbeitet 21. August 2010 von chooter696 Zitieren
lilith2k3 Geschrieben 22. August 2010 Geschrieben 22. August 2010 ... // Variablen S_Spieler Spieler[4]; int iAnzSpieler = 0; [COLOR="Red"][b]char c;[/b][/COLOR] ... cout << "Wie viele Spieler: "; cin >> iAnzSpieler; [COLOR="Red"][b]cin.get(c);[/b][/COLOR] ... cout << "Spieler " << i+1 << endl; cout << "Dein Name: "; cin.get (Spieler[i].Name, 29); [COLOR="Red"][b]cin.get(c);[/b][/COLOR] Versuch's mal damit Zitieren
3tiXoz Geschrieben 23. August 2010 Autor Geschrieben 23. August 2010 Hey, sry für die späte Antwort^^ @chooter696: Danke, hat sofort funktioniert. Aber die Erklärung versteh ich nicht so ganz^^ Wieso ist das letzte Zeichen ein Enter? Und wie kann ich den Tastatur Buffer leeren? :confused: Gruss 3tiXoz Zitieren
rikiel Geschrieben 24. August 2010 Geschrieben 24. August 2010 Du kannst den Eingabepuffer mit dem Befehl fflush(stdin) leeren. Zitieren
Klotzkopp Geschrieben 24. August 2010 Geschrieben 24. August 2010 Du kannst den Eingabepuffer mit dem Befehl fflush(stdin) leeren.Ds klappt nur bei manchen Compilern. Laut Standard erzeugt fflush auf Eingabeströmen undefiniertes Verhalten. Zitieren
lilith2k3 Geschrieben 24. August 2010 Geschrieben 24. August 2010 Weswegen man einfach das letzte Zeichen auslesen und im Nirvana verschwinden lassen kann. Zitieren
TDM Geschrieben 24. August 2010 Geschrieben 24. August 2010 Weswegen man einfach das letzte Zeichen auslesen und im Nirvana verschwinden lassen kann. Da kannst du auch gleich sync aufrufen. This effectively means that the unread characters in the buffer are discarded. :floet: PS: Man kann Enter auch einfach ignoren. Zitieren
3tiXoz Geschrieben 24. August 2010 Autor Geschrieben 24. August 2010 Danke für die ganzen Antworten. Jetzt versteh ich wenigstens was es mit dem cin.get© auf sich hatte^^ Hab jetzt einfach cin >> benutzt und funktioniert zumindest jetzt alles wies soll^^ Gruss 3tiXoz Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.