Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Eingabe funktioniert nicht (cin.get() )

Empfohlene Antworten

Veröffentlicht

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

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 von chooter696


...


// 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 ;)

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

Du kannst den Eingabepuffer mit dem Befehl fflush(stdin) leeren.

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.

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.