004
15.04.2009, 08:37 Uhr
FloSoft
Medialer Over-Flow (Administrator)
|
Naja, was Pler meint ist folgendes:
Du gibst eine Zahl ein drückst Enter -> das cin liest die zahl aus, lässt das Enter aber drin im Eingabepuffer. Das wiederholt sich für das zweite cin. Nun kommt er in die Funktion "getchar" - sieht "oh - ich hab ja noch ein Zeichen (das Enter) im Eingapepuffer - liest das aus -> schwupp "läuft" über das getchar hinweg und beendet das programm = fenster schließt sich.
Sinnvoller ist es meist sowas in der Art zu machen:
C++: |
... #include <sstream> ...
string s; stringstream sr;
...
// cin >> i; getline(cin, s); // komplette Zeile einlesen sr.str(s); sr >> i; // int rauslesen ...
// cin >> g; getline(cin, s); // komplette Zeile einlesen sr.str(s); sr >> g; // int rauslesen
|
so bleibt nichts im Eingabepuffer, und wenn man keine Zahl eingibt kann man das z.b korrekt abfangen:
C++: |
do { cout << "Bitte zahl für i eingeben: "; // cin >> i; getline(cin, s); // komplette Zeile einlesen sr.str(s); } while( ! (sr >> i) );
|
die Schleife läuft dann solang, bis er eine Zahl einlesen kann, alles andere wird dadurch ignoriert.
z.b
Code: |
Bitte zahl für i eingeben: ABCD (falsch) Bitte zahl für i eingeben: asdasd15432dasd (falsch) Bitte zahl für i eingeben: 51 (in ordnung, weiter mit g)
Bitte Zahl für g eingeben: ...
|
-- class God : public ChuckNorris { }; Dieser Post wurde am 15.04.2009 um 08:38 Uhr von FloSoft editiert. |