Veröffentlicht 20. August 201015 j 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
20. August 201015 j Hat es einen bestimmten Grund, dass du char-Arrays benutzt, und nicht std::string?
21. August 201015 j 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 201015 j von chooter696
22. August 201015 j ... // 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
23. August 201015 j 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
24. August 201015 j 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.
24. August 201015 j Weswegen man einfach das letzte Zeichen auslesen und im Nirvana verschwinden lassen kann.
24. August 201015 j 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.
24. August 201015 j 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
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.