Endlosschleifen bei getline
-
Hi
habe folgenden Code verfasst:
(nur Ausschnitt)void addMenu(trainer &a) { bool go = true; while(go) { int eing; cout << "(1)Vokabeln hinzufuegen" << endl; cout << "(2)Hauptmenu" << endl; cin >> eing; cout << endl; switch (eing) { case 1: { string next; next = "n"; while(next == "n") { string en; string de; cout << "Englisch: "; std::getline(std::cin,en); cout << "Deutsch: "; std::getline(std::cin,de); a.add(en,de); cout << "|N|ext? Any other key aborts!"; cin >> next; }; a.safe(); break; } case 2: { go = false; break; } default: { cout << "Falsche Eingabe\n" << endl; } }; }; };
nochmal die Funktionen add und safe die darin gebraucht werden:
void trainer::add(string e, string d) { vokabel *tmp = vok; ++anzahl; vok = new vokabel[anzahl]; for(int i=0;i<(anzahl-1);++i) { vok[i] = tmp[i]; } vok[anzahl-1].deu = d; vok[anzahl-1].engl = e; delete [] tmp; }
void trainer::safe() { ofstream out("vok.txt"); for(int i=0;i < anzahl;++i) { out << vok[i].engl << ";" << vok[i].deu; if(i != (anzahl-1)) out << endl; }; out.close(); };
struct vokabel { string engl; string deu; };
So, folgendes Problem:
Wenn ich Vokabeln eingeben will, dann sieht das bei mir folgendermaßen aus:(1)Vokabeln hinzufuegen
(2)Hauptmenu
1Englisch: to dress
Deutsch: kleiden
|N|ext? Any other key aborts!(1)Vokabeln hinzufuegen
(2)HauptmenuWoran liegt das, das er die Abfrage von Next überspringt?
-
Ich glaube bei dir steht noch das Enter-Zeichen im Puffer, schreibe
std::cin.get();
Nach der Zeile
std::getline(std::cin, de);
//edit:
Zweimal std:: vergessenCaipi
-
nach nem getline steht da kein enter-zeichen mehr im puffer... sieht nach VC++ getline-Bug aus.
-
habs so abgeändert wie Caipi geschrieben hat, Fehler bleibt aber der gleiche (habs auch nochmal direkt hinter "std::getline(std::cin, en);" eingefügt, keine Verbesserung)
ps: wenn sich jemand fragt, was das hier mit endlosschleifen zu tun hat... das war ein Fehler von mir *G* wollte ursprünglich ein anderes Problem schildern, welches sich aber bereits gelöst hat. Vergaß dann die Überschrift zu ändern
-
versuch mal den fehler zu reduzieren...
was macht denn nur:getline(cin, a);
getline(cin, b);Wie gesagt, wenn du den VC++ hast, liegts vielleicht daran.
-
einmal wie DrGreenthumb schon sagt, fix mal das studio, den stlfix gibt es auf hume sikkins seite
zum zweiten leere mal den buffer von restzeichen:cin.clear(); cin.ignore(numeric_limits<streamsize>::max(), '\n');//oder INT_MAX
-
ohne std:: passiert genau das selbe.
Wenn ich den Code von elise einfüge bekomme ich die Fehlermeldungen:C:\Eigene Dateien\Vokabeltrainer\main.cpp(30) : error C2065: 'numeric_limits' : nichtdeklarierter Bezeichner
C:\Eigene Dateien\Vokabeltrainer\main.cpp(30) : error C2275: "streamsize" : Ungültige Verwendung dieses Typs als Ausdruck
d:\programme\microsoft visual studio\vc98\include\iosfwd(21) : Siehe Deklaration von 'streamsize'
C:\Eigene Dateien\Vokabeltrainer\main.cpp(30) : error C2039: 'max' : Ist kein Element von '`global namespace''
C:\Eigene Dateien\Vokabeltrainer\main.cpp(30) : error C2065: 'max' : nichtdeklarierter Bezeichner
C:\Eigene Dateien\Vokabeltrainer\main.cpp(34) : error C2275: "streamsize" : Ungültige Verwendung dieses Typs als Ausdruck
d:\programme\microsoft visual studio\vc98\include\iosfwd(21) : Siehe Deklaration von 'streamsize'evtl brauch ich noch ne header die ich net drin hab?
achja, und wo genau finde ich " hume sikkins seite"?
danke
-
-
so... vielen Dank
habs grad mal runtergeladen und der Code sieht wie folgt aus:
while(next == "n") { string en; string de; cout << "Englisch: "; getline(cin,en); cout << "Deutsch: "; getline(cin,de); a.add(en,de); cout << "|N|ext? Any other key aborts!"; cin >> next; };
... hat bewirkt, dass die Next-Frage nicht mehr übersprungen wird... dafür aber die Eingabe der Englisch-Vokabel
Habs auch schon mit std:: getestet.