gcc getline() Problem wie bei MSVC
-
Was ist denn das?
Das kann doch gar nicht gehen. Also mein VC++.net meckert. Das müsste doch so aussehen:char name[81], vorname[81]; while(ende != "Ende") { cout << "Name eingeben: "; cin.getline(name,80); // Es werden können 80 Zeichen eingelesen werden cout << "Vorname eingeben: "; cin.getline(vorname,80); // Auch 80 Zeichen cout << "Ende: "; cin >> ende; }
cin.name oder so geht gar nicht, cin ist ein vordefinierter Typ und getline eine Methode auf die über den .-Operator zugegriffen wird. Also das sollte jetzt gehen. Es werden 80 Zeichen eingelesen und in der jeweiligen Variable gespeichert.
Code-Hacker
-
std::getline(std::istream &,std::string &) ist nicht gleich std::istream::getline(char *,streamsize,char)
-
Hmmm...er meint das gibt es nicht....
*ditsch* Habe den Fehler gefunden, geht jetzt.
Hier richtig, das Programm:
while(ende != "Ende") { cout << "Name eingeben: "; getline(cin,name); cout << "Vorname eingeben: "; getline(cin,vorname); cout << "Ende: "; cin >> ende; cin.sync(); cin.clear(); }
Code-Hacker
-
Code-Hacker schrieb:
Hmmm...er meint das gibt es nicht....
*ditsch* Habe den Fehler gefunden, geht jetzt.
Hier richtig, das Programm:
while(ende != "Ende") { cout << "Name eingeben: "; getline(cin,name); cout << "Vorname eingeben: "; getline(cin,vorname); cout << "Ende: "; cin >> ende; cin.sync(); cin.clear(); }
Code-Hacker
Bei mir überspringt er jetzt beim ersten Durchlauf die Eingabe vom Namen und Ende und ab dem zweiten Durchlauf wird nur noch die Eingabe von ende übersprungen.
-
Also bei mir funktioniert es einwandfrei (VC++.net). Hast du es mir cin.sync(); und cin.clear();? Ich hatte davor cin.irgnore(); (was macht das eigentlch???) und cin.sync(); da stehen, da funtzte es zwar auch, aber damit wurden keine evtl. Fehlerflags gelöscht.
Code-Hacker
-
Code-Hacker schrieb:
Also bei mir funktioniert es einwandfrei (VC++.net). Hast du es mir cin.sync(); und cin.clear();? Ich hatte davor cin.irgnore(); (was macht das eigentlch???) und cin.sync(); da stehen, da funtzte es zwar auch, aber damit wurden keine evtl. Fehlerflags gelöscht.
Code-Hacker
Ich hab das genauso mit cin.sync() und cin.clear() am Ende stehen aber es treten halt immer noch Fehler auf wie oben im Beitrag beschrieben. Bei mir unter MSVC 6 läuft es auch einwandfrei aber nicht beim gcc :(:(
-
Probier mal so:
/*evtl. auch hier: cin.sync(); cin.clear();*/ while(ende != "Ende") { cout << "Name eingeben: "; getline(cin,name); cin.sync(); cin.clear(); cout << "Vorname eingeben: "; getline(cin,vorname); cin.sync(); cin.clear(); cout << "Ende: "; cin >> ende; cin.sync(); cin.clear(); }
Code-Hacker
-
Hallo,
probier mal folgenden Code aus#include <iostream> #include <string> using namespace std; int main () { string name, vorname, ende; while(ende != "Ende") { cout << "Name eingeben: "; getline(cin,name); cout << "Vorname eingeben: "; getline(cin,vorname); cout << "Ende: "; getline(cin,ende); } cout << "Ende.\n"; }
das sollte funktionieren. andernfalls kannst du statt
getline(cin,ende);
folgendes machen:
cin >> ende; cin.ignore();
oder
cin >> ende; char c; cin.get(c);
mein gcc füllt c dann immer mit '\n', also scheint operator>> '\n' im stream zu lassen. inwieweit das dem standard entspricht weiß ich allerdings im moment nicht. hab allerdings auch keine lust, nachzuschlagen
gegebenenfalls sagst du einfach die version deines gcc und du wirst in ein entsprechenderes forum verschoben
-
davie schrieb:
Hallo,
probier mal folgenden Code aus#include <iostream> #include <string> using namespace std; int main () { string name, vorname, ende; while(ende != "Ende") { cout << "Name eingeben: "; getline(cin,name); cout << "Vorname eingeben: "; getline(cin,vorname); cout << "Ende: "; getline(cin,ende); } cout << "Ende.\n"; }
das sollte funktionieren. andernfalls kannst du statt
getline(cin,ende);
folgendes machen:
cin >> ende; cin.ignore();
oder
cin >> ende; char c; cin.get(c);
mein gcc füllt c dann immer mit '\n', also scheint operator>> '\n' im stream zu lassen. inwieweit das dem standard entspricht weiß ich allerdings im moment nicht. hab allerdings auch keine lust, nachzuschlagen
gegebenenfalls sagst du einfach die version deines gcc und du wirst in ein entsprechenderes forum verschobenIch hab es jetzt mit
cin >> ende;
cin.ignore();Beim ersten Schleifendurchlauf ueberspringt der die Eingabe vom Namen aber ab dem zweiten Durchlauf wird dann alles gelesen, aber beim ersten wird halt nur Vorname und ende gelesen und Name übersprungen.
Meine gcc Version ist die 3.3er.
-
Mir ist noch ein Fehler aufgefallen aber unter MSVC dort werden zwar alle Eingaben mit getline korrekt ausgefürt aber in die Variable vorname wird nichts geschrieben die bleibt leer obwohl man eine Eingabe macht.