frage zu cin.getline()
-
Hallo!
ich möchte eine bestimmte anzahl von zeichen mittels cin von einem stream einlesen. das ganze mach ich einfach mit getline(), funktioniert super bei dateien aber nicht, wenn von der tastatur gelesen wird.
hab also folgendes konstruiert:char s[50]; cout << "Eingabe:"; cin.getline(s,11, 'x'); cout << endl << "gelesen [" << s << "]" << endl;
das sollte dazu führen, dass ich 10 zeichen per tastatur einlese, bis ich entweder ein 11. eingebe, oder 'x' drücke.
aber eigentlich muss ich IMMER (selbst wenn limitter = 'x') die Eingabe mit ENTER abschließen. ist das ok laut standard, oder liegt das einfach am compiler/OS, dass es nicht auch ohne abschließendes ENTER funktioniert...?
-
AFAIK ist das vom Standard her okay. Bei Tastatur Eingaben erwartet C(++) eigentlich immer ein Enter
-
... bloederweise.
ich glaub ich hab das schon oefter gefragt, aber gibt es einen standardkonformen weg, dass direkt das eingegebene gelesen wird, ohne enter?
-
ich glaub ich hab das schon oefter gefragt, aber gibt es einen standardkonformen weg, dass direkt das eingegebene gelesen wird, ohne enter?
Nein. Nicht über die Tastatur.
-
Ich habe das Problem, dass ich eine Eingabe brauche, die auf ein Enter wartet
und trotzdem mehr einliest als bis zum Leerzeichen.
Wenn ich mitcin >> variable;
arbeite liest er es nur bis zum leerzeichen ein.
Wenn ich mit
cin.getline(variable,50);
arbeite liest er zwar alles ein aber wartet nicht auf meine Eingabe und da ich es in einer Schleife anwende macht man programm dann einfach weiter und liest das ein was ich als nächstes ausgebe.
Kann mir da jemand helfen?
-
Weiß keiner wie das geht oder warum antwortet mir keiner??? Ich bin echt am verzweifeln!
-
Hallo,
ich versteh dein Problem nicht. Kannst du mal etwas Code posten, der selbiges verdeutlicht?
-
Das ist meine Schleife
do
{
menue();
cout << " ";
cin >> e;
switch(e)
{
case 1:
schl.text_eingabe(); <- Hier wird Eingabe aufgerufen
break;
case 2:
schl.text_ausgabe();
break;
case 3:
schl.text_speichern();
break;
case 4:
schl.verschl();
break;
case 5:
schl.entschl();
break;
}
}while(e != 0);Das passiert in der Eingabefunktion:
cout << " Bitte geben Sie einen Text ein:\n";
cin.getline(text,49);Leider wartet die Eingabe jetzt nicht darauf, dass ich was eingebe und die Schleife läuft weiter. Mit cin >> variable; gehts halt auch nicht weil dann ja nur bis zum Leerzeichen eingelesen wird
-
Leider wartet die Eingabe jetzt nicht darauf, dass ich was eingebe und die Schleife läuft weiter. Mit cin >> variable; gehts halt auch nicht weil dann ja nur bis zum Leerzeichen eingelesen wird
Was daran liegt, dass nach dem cin >> variable noch das '\n' im Puffer liegt. Dieses wird dann von dem getlien gelesen. Deshalb kannst du nix einlesen.
Lösung:
Du musst nach dem cin >> Variable alle restlichen Zeichen die sich noch im Eingabepuffer befinden ignorieren:void clearIn() { cin.clear(); #if DAS_MIT_IGNORE_NICHT_FUNKTIONIERT cin.sync(); #else cin.ignore(cin.rdbuf()->in_avail()); #endif } int main() { ... cin >> e; clearIn(); // Zeichen im Eingabepuffer ignorieren. ... }