getline
-
Tach zusammen,
so also ich weiß das klingt irgendwie blöd aber ich habe ein problem mit der ganz schlichten aufnahme eines strings

da ich bei einer stelle in meinem programm nicht nur das erste wort sondern die ganze zeile lesen will benutze ich natürlich "getline" anstatt "cin".
ich habe jetz einfach alle meine
cin>>x;durch
getline(cin,x);ersetzt.
hinter die aufnahme des strings haben ich eine schleife gesetzt, die so lange die aufnahme wiederholt, bis der string für mein programm annehmbar ist.
wenn ich das jetz kompiliere wird aber bei meiner getline eingabe automatisch einmal nichts eingegeben und es erscheint (erneute aufforderung aus meiner schleife) :
Probier es nochmal! ...
und erst danach kann ich etwas eingeben.
die aufnahme des strings selbst klappt wunderbar nur halt, dass immer beim ersten aufrufen von getline automatisch nichts eingeben wird, was natürlich optisch nicht so gut kommt

Hier nochmal alles im überblick:
cout<<"Antwort:"; getline(cin,x); // Bei dieser stelle wird immer automatisch nichts eingegeben cout<<endl<<endl; while(x.find("ja")==string::npos && x.find("nein")==string::npos) { cout<<"Probier es nochmal!"; cout<<endl<<endl; cout<<"Antwort:"; getline(cin,x); cout<<endl; }
-
Ich versteh nicht so richtig was du da versuchst.
x ist ja wahrscheinlich = 0,da du ja keinen Wert zugewiesen hast und wieso übergibst du cin?
-
Tobi3000 schrieb:
x ist ja wahrscheinlich = 0,da du ja keinen Wert zugewiesen hast und wieso übergibst du cin?
Er versucht eine ganze Zeile bis zum nächsten newline einzulesen. x ist vermutlich ein std::string. cin übergibt er, weil getline nunmal so funktioniert.
Ich vermute, daß da noch ein newline im cin drinsteht.
Versuch mal sowas wie std::cin.ignore(std::cin.rdbuf()->in_avail()); davor, das nimmt eventuell noch vorhandene Eingaben weg.
-
danke für eure antworten .. allerdings funktioniert die cin.ignore nicht
-
Hm, was passiert denn, wenn Du ein neues Projekt anlegst und mal nur das machst, ohne vorher irgendwas anderes zu tun. Funktioniert es dann?
-
tjo .. so gehts xD
-
Also steht vorher noch irgendwas in dem stream drin. Das mußte rausmachen. Geht normalerweise mit diesem häßlichen Konstrukt, das ich da gepostet hatte. Möglicherweise muß noch ein cin.clear() oder sowas davor.
-
klappt nich ... ne idee wo ich mir sowas herhol ?
-
Hallo Bonzy,
nach Deiner Fehlerbeschreibung bin ich mir zwar nicht ganz sicher, aber wenn Du vor einem Visual Studio 6 sitzt, dann ist Dein Problem hier beschrieben.
Gruß
Werner
-
nee ich arbeite mit dev-c++
console application

-
probier mal std::cin.sync()
-
geht auch nit ^^
-
Hi!
Naja, du musst das cin.clear() schon drin lassen:
std::cin.clear(); std::cin.sync();oder:
std::cin.clear(); std::cin.ignore(std::cin.rdbuf()->in_avail());clear() löscht die Fehlerflags, rdbuf()->in_avail() guckt wieviel zeichen im Puffer sind und ignore wirft diese dann weg. sync() leert auch den Puffer. Also eine von beiden Methoden sollte eigentlich immer funktionieren.
Greetz
-
hmm .. jetz klappts

hatte zwar cin.clear() mit drin aber wahrscheinlich irgendwas falsch gemacht .. naja egal jetz gehts ja
thx
