getline(cin,newName); spinnt total rum!?
-
wenn ich mit getline ne zeile einlesen will spinnt mein programm total rum... gibt es einen bekannten bug oder sowas? normalerweise müsste das doch klappen?!
hab mir den stlfix runtergeladen. nun hab ich folgende zeilen:
cout<<"Namen eingeben:"<<endl; getline(cin,newName); cout<<"Nummer eingeben:"<<endl; getline(cin,newNumber);
Leider wird getline(cin,newName); scheinbar einfach übersprungen!
es kommt nur:
Namen eingeben:
Nummer eingeben:
|Nun kann ich die nummer eingeben?!
Mensch wie kann es denn sein das SO eine wichtige programmiersprache so bescheuerte bugs enthält?
-
Hallo,
du solltest dir angewöhnen, etwas konkreter zu werden. Was heisst denn "spinnt rum" genau?
Evtl. hilft dir das vor dem getline:
cin.ignore(cin.rdbuf()->in_avail());
Das löscht den Inhalt des Puffers.
-
ich habs doch weiter unten beschrieben! das getline wird einfach überprungen und die variable enthält nix...wenn zwei abfragen direkt hinternander kommen funktioniert die zweite aber seltsamerweise?!
edit: danke es klappt
-
Du solltest vor allen Dingen nicht C-Stream-Funktionen und C++-Streamklassen-methoden vermischen, was Du hier nämlich tust!
Versuchs mal so, bin ziemlich sicher, dass das klappt:cin.getline(newName, sizeof(newName));
Dann klappts auch mit dem Nachbarn... :p
-
lol wieso sagt mir das keiner ? ^^ naja wenn ich zuhauser bin probier ich das mal aus...danke!
-
bei cin.getline kriege ich:
--------------------Konfiguration: meinbuch - Win32 Debug-------------------- Kompilierung läuft... main.cpp D:\Programme\C++ files\MSDev98\MyProjects\meinbuch\main.cpp(160) : error C2664: 'class std::basic_istream<char,struct std::char_traits<char> > &__thiscall std::basic_istream<char,struct std::char_traits<char> >::getline(char *,int)' : Konvertierung des Parameters 1 von 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' in 'char *' nicht moeglich Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden Fehler beim Ausführen von cl.exe. meinbuch.exe - 1 Fehler, 0 Warnung(en)
-
hi,
also ich hab es so gelernt das du vor cin.getline(); die methode cin.sync(); aufrufen musst um ggf. diesen fehler zu vermeiden. so weit ich weiß lieg es daran, dass der eingabepuffer nicht leer ist aber so genau weiß ich es auch nicht.
also probier mal cin.sync(); dann wird es nicht übersprungen
-
pixartist schrieb:
bei cin.getline kriege ich:
--------------------Konfiguration: meinbuch - Win32 Debug-------------------- Kompilierung läuft... main.cpp D:\Programme\C++ files\MSDev98\MyProjects\meinbuch\main.cpp(160) : error C2664: 'class std::basic_istream<char,struct std::char_traits<char> > &__thiscall std::basic_istream<char,struct std::char_traits<char> >::getline(char *,int)' : Konvertierung des Parameters 1 von 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' in 'char *' nicht moeglich Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden Fehler beim Ausführen von cl.exe. meinbuch.exe - 1 Fehler, 0 Warnung(en)
Entweder:
cin.getline(buffer, len); wobei buffer ein *char-Array* ist oder
getline(cin, str); wobei str ein std::string ist. Du hast jetzt die erste Variante mit einem String verwendet.