PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : cin, get(), getline() und ENTER



McG.linux
14-11-2003, 21:22
Hi

Hab ne Frage bezüglich C++. Ich versuche gerade in einem Konsolen-Programm
Ein/Ausgabe zu coden und ich weiß nicht wie ich ENTER abfangen kann.

cin.get() und cin.getline() sollten doch bis zum \n lesen. Aber alle bisherigen Versuche
schlugen Fehl. Jedesmal wird bei EIngabe eines ENTERS erst einmal in eine neue Zeile gesprungen. Erst beim zweiten ENTER wird dann die Eingabe wirklich gelesen.

Probiert hab ich:
cin.get(c) // char c
cin.getline(c, 10, '\n') // char c[10]
cin >> noskipws >> c // char c

Gebe ich ein zeichen ein, wird dieses eingelesen und die entsprechende Ausgabe gemacht. Wenn ich ENTER drücke passiert oben genanntes.

Weiß hier jemand wie ich das mit den c++-Bordmitteln (istreams) lösen kann) bzw wo das Prob genau liegt?

Gruß
mcg.linux

Giuly
14-11-2003, 23:03
char ka = "\n";
string ichwillgelesenwerden;
cin >> ichwillgelesenwerden >> ka;

McG.linux
15-11-2003, 10:25
Thx, werd ich ausprobieren.. aber so wie es scheint hab ich woanders ein Prob..
denn getline(cin, str); funktioniert z.B. auch nicht. Auch dann muss ich ENTER zwei mal drücken...

Gruß
mcg.linux

wraith
15-11-2003, 10:55
Original geschrieben von McG.linux

denn getline(cin, str); funktioniert z.B. auch nicht. Auch dann muss ich ENTER zwei mal drücken...

Nur damit ich es richtig verstehe,wenn du bei diesem Code irgendwas eingibst,und dann ENTER drückst,passiert erstmal nichts?Erst beim zweiten ENTER wird die Ausgabe gemacht?


#include <string>
#include <iostream>

using namespace std;

int main()
{
string str;
getline(cin,str);
cout << str << endl;
}

Wenn es das ist,muß ich die Frage stellen,ob du zufällig MSVC++ 6.0 benutzt ^^ (da gibt es nämlich so einen Bug).

McG.linux
15-11-2003, 12:38
Das erste ENTER erzeugt halt eine neue Zeile, (also \n halt) weiter geht es erst nach einem erneuten ENTER.

Gruß
mcg.linux

wraith
15-11-2003, 13:01
Original geschrieben von McG.linux
Das erste ENTER erzeugt halt eine neue Zeile, (also \n halt) weiter geht es erst nach einem erneuten ENTER.

Dann ist ein Bug in deiner getline Implementierung.
Welche benutzt du?

McG.linux
19-11-2003, 11:54
So. Da bin ich wieder.. K, hat sich erledigt. Das Problem war, dass von dem ursprünglichen Versuch mit cin >> c noch ein cin.ignore(numeric_limits<streamsize>::max(),'\n') drin war. Als ich das rausgenommen hab lief's.. (mir war nicht ganz klar was cin.ignore() macht. Ich dachte es löscht eine Anzahl Zeichen bis zum ENDchar aus dem Eingabepuffer. Aber es wartet wohl auch gleich solange bis da was drin ist..)

Gruß & thx
mcg.linux