cin.getline();
-
hi,
ich will 3 zeichen in ein char-array einlesen.
dazu nehm ichcin.geline(buffer,4);
das problem is nur, dass getline nich einfach den rest verwirft, sondern nur 3 zeilen einliest... ich mach das ganze in ner while schleife, die bei ungültigen eingaben neu durchlaufen wird... wenn ich jetzt mehr als 3 zeichen eingeben lande ich in ner endlossschleife...
ich hab schoncin.clear(); cin.ignore(0xFFFFFF, '\n');
dahintergepackt, funzt auch, nur irgendwie gefällt mir die lösung noch nicht so recht
nachteil da is z.b. wenn man wirklich nur 3 zeichen eingibt, dass man 2mal enter drücken muss...
thx 4 help
-
mit gcount kannst du herausfinden wieviele zeichen eingelesen wurden.
cin.getline(buffer, 4); if(cin.gcount() <= 3); cin.ignore(cin.gcount()-3);
kann sein, dass diese dreien da was anderes sein müssen, aber es geht ja ums prinzip.
-
hm danke, aber er gibt mir immer 0 bei cin.gcount...
grüsse
-
japro schrieb:
mit gcount kannst du herausfinden wieviele zeichen eingelesen wurden.
gcount liefert zwar die durch die letzte Eingabeoperation verarbeiteten Zeichen, allerdings gilt dies nur für Eingabefunktionen die unformatiert arbeiten (z.B. read). getline ist aber eine formatbasierte Eingabefunktion.
@chissay
Ersetz mal deincin.ignore(0xFFFFFF, '\n');
durch ein:
cin.ignore(cin.rdbuf()->in_avail());
bzw:
cin.sync();
-
thx des klappt... allerdings durchläuft er jetzt scheinbar die schleife (*anzahl eingegebener chars*/4)-mal...
vielleicht gibt es noch ne bessere Lösung? ich hab getline genommen, da ja cin>>buffer; nicht prüft, wieviel der buffer aufnehmen kann...
grüsse chissay