"getline" Kommando wird ignoriert
-
Hallo,
ich bin gerade dabei c++ zu erlernen und habe soeben mein erstes, gröberes Problem das ich nicht alleine Lösen kann.
Also wie der Threadname schon sagt wird ein "getline" Kommando vom Computer beim Kompilieren überlesen und macht einfach weiter als würde dieses Kommando nicht dort stehen. Ich hoffe ihr versteht was ich meine...So sieht der Code aus:
int b, i; cout << "Bitte geben sie ihr Alter an\n"; cin >> i; b = 100 - i; cout << "Soso, sie haben " << i << " angegeben! Ich hoffe das stimmt :)\n"; cout << "Wow, das heißt sie werden in einem Jahr " << ++i << "!\n"; cout << "Und in " << b << " Jahren werden sie dann 100! Unglaublich!\n"; // cin (input) mit Strings - auch sehr wichtig int m, d; string name, datum; cout << "Wie heißt du eigentlich? \n"; getline (cin, name); <-- DAS WIRD ÜBERSPRUNGEN cout << "Hallo " << name << "! Wann genau bist du denn geboren (dd/mm/yyyy)? "; getline (cin, datum); <-- HIER WIRD WEITERGEMACHT . . .Ausgabe ist:
Bitte geben sie ihr Alter an
[EINGABE]16
Soso, sie haben 16 angegeben! Ich hoffe das stimmt
Wow, das heißt sie werden in einem Jahr 17!
Und in 84 Jahren werden sie dann 100! Unglaublich!
Wie heißt du eigentlich?
[Diese Eingabe wird übersprungen]
Hallo ! Wann genau bist du denn geboren (dd/mm/yyyy)?
[EINGABE]Irgendwo anders hab' ich gelesen, dass das getline wegen dem "\n" davor übersprungen wird, nur Lösung gab es keine dazu.
Also hoffe ich, dass ihr mir helfen könnt.lg.
Groebi
-
std::istream& clear_stream(std::istream& in) { return in.clear(), in.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); }dann clear_stream(std::cin) vorm Einlesen aufrufen und fertig!
-
(D)Evil schrieb:
std::istream& clear_stream(std::istream& in) { return in.clear(), in.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); }dann clear_stream(std::cin) vorm Einlesen aufrufen und fertig!
muss dass so schwierig sein??
un wieso nich so:
#include<iostream> using namespace std; int main() { int b, i; cout << "Bitte geben sie ihr Alter an\n"; cin >> i; b = 100 - i; cout << "Soso, sie haben " << i << " angegeben! Ich hoffe das stimmt :)\n"; cout << "Wow, das heißt sie werden in einem Jahr " << ++i << "!\n"; cout << "Und in " << b << " Jahren werden sie dann 100! Unglaublich!\n"; // cin (input) mit Strings - auch sehr wichtig int m, d; string name, datum; cout << "Wie heißt du eigentlich? \n"; cin.ignore(); // 1 Befehl! getline (cin, name); // <-- DAS WIRD Nicht mehr ÜBERSPRUNGEN cout << "Hallo " << name << "! Wann genau bist du denn geboren (dd/mm/yyyy)? "; getline (cin, datum); }
-
danke für deine Antwort (D)Evil!
Doch wie gesagt, ich bin Anfänger und kann sehr wenig, ja eigentlich noch nichts mit dieser Lösung anfangen, tut mir leid.
Ah! Gerade ist noch eine Mögliche Lösung angekommen.
Witzig, genau das hab ich mir auch schon überlegt, und es hat ja auch funktioniert, doch ich würde gerne die Ursache dieses Problems kennen lernen und darum harke ich nochmal nach
Also wenn mir das Jemand erlären könnte, dann wäre ich sehr dankbar.
Trotzdem, danke euch Beiden!lg.
groebiPS: (D)Evil - Morgen bist du 3 Jahre hier angemeldet. Alles Gute

-
Jo danke

Ehm es lieggt daran das die eingabe gepuffert ist und noch reste im puffer sind
