You are not logged in.

  • Login

1

Saturday, April 19th 2008, 4:07pm

Einfache Aufgabe, dummes Problem: getline(cin, str);

Hallo,

ich habe folgendes Problem: Ich lasse den Benutzer verschiedene Eigenschafften eines Objektes eingeben. Diese Eingaben sind in Methoden der Klasse des Objektes deifiniert. Aufgerufen werden diese in der Main-Klasse meiner Applikation. Zuerst soll der Benutzer einen String, dann zwei Double- und dann eine integer-Variable eingeben. Vor und nach jeder einzelnen Eingabe ist Text welcher mit cout ausgegeben wurde. Die EIngabe geschiet beim String mit getline(cin, str); und bei den anderen variablen mittels cin >> foo;

Die Schleife in der die Methoden aufgerufen werden sieht folgendermaaßen aus:

C/C++ Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// Einlesen der Eigenschafften einer Produktgruppe;
int i = 1;
while( i <= anzahlProjektgruppen ) {
 
// Ausgabe des Eingabfortschritts
cout << "\n\n\t\t\t### Produktgruppe " << i << " von " << anzahlProjektgruppen << " ###\n";
 
// Wenn wir eine neue Produktgruppe anlegen möchtem müssen wir ersteinmal
// in Erfahrung bringen wie diese heißen soll (zb. Taschentuch, Kugelschreiber...).
aProduktgruppen[i].eingabeName();
 
// Nun können auch Gewinn, Zeit und Mindestanzahl eingegeben werden.
aProduktgruppen[i].eingabeGewinn();
aProduktgruppen[i].eingabeZeit();
aProduktgruppen[i].eingabeMindestanzahl();
 
// Inkrementierung von i, damit die Schleife irgentwann endet
i++;
 
}


eingabeName und eingabeGewinn so:

C/C++ Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
 * Methode zur Benutzereingabe des Produktgruppennamens.
 */
void eingabeName() {
 
cout << "\n  Wie ist der Name der neuen Produktgruppe?\n-- ";
getline(cin, name);
 
};
/**
 * Methode zur Benutzereingabe des Gewinnes.
 */
void eingabeGewinn() {
 
cout << "\n  Welchen Gewinn bringt ein Produkt der Produktgruppe " << name << "?\n-- ";
cin  >> gewinn;
 
};


Wenn ich das Programm starte habe ich aber nie die Gelegenheit dazu einen Namen einzugeben. Das Programm läuft weiter bis zur Eingabe des Gewinnes und wartet dann da auf eine Eingabe.
Da in der Ausgabe ein \n fehlt, schätze ich das getline eben diese Leere Zeile eingelesen hat. Wie kann ich das verhindern/was mache ich falsch?

Vielen Dank für eure Hilfe

// EDIT: Ein cin.clear(); vor der Ausführung des getlines hilft auch nicht.

This post has been edited 1 times, last edit by "MEETyA" (Apr 19th 2008, 4:26pm)


2

Saturday, April 19th 2008, 7:19pm

Versuchs mal mit einem zusätzlichen

C/C++ Quellcode

1
std::cin.ignore(std::cin.rdbuf()->in_avail());


Liegt AFAIK an dem Doppelten Zeilenende in Windows ...

3

Sunday, April 20th 2008, 2:28pm

Hey,

vielen Dank für deine Hilfe. cin.ignore(); hat geholfen

Similar threads

Social bookmarks