001
19.10.2006, 13:37 Uhr
0xdeadbeef
Gott (Operator)
|
Heh. Da bist du auf ne ziemlich alte Geschichte reingefallen. Also gut, der Reihe nach, erstmal die Unfeinheiten:
C++: |
#include <iostream>
using namespace std;
|
#include <iostream.h> ist schlicht und ergreifend falsch. Es gab vor der Standardisierung von C++ eine Zeit, in der viele Compiler das so gemacht haben, nichtsdestoweniger ist es inzwischen einfach falsch, und neuere Compiler lehnen das in aller Regel auch ab. Oben ist der Standard-Weg, das zu ersetzen, wobei using namespace std; dazu da ist, Objekte im namespace std ohne Präfix benutzen zu können - ohne es müsstest du später
schreiben.
main ist immer int. Und in C++, wie auch in C99, musst du das explizit angeben.
Was das eigentliche Problem angeht, was passiert ist folgendes: Angenommen, du willst ihm 23 als Zahl und "Hallo" als string mitgeben. Wenn du das auf der Konsole eingibst, steht im Eingabestream
drin. Was passiert, ist also folgendes:
liest die 23 aus dem Stream. Danach steht im Stream noch
drin.
C++: |
cin.getline(text, 255, '\n');
|
Liest bis zum nächsten \n aus dem Stream, danach steht also im Stream noch
...und in text steht "".
Der einfachste Weg darum herum für den Moment dürfte wohl sein, getline zweimail aufzurufen, aber das ist natürlich nicht der schönste Weg. Sinnvoll ist an dieser Stelle, die Eingabe zu buffern, das bedeutet
C++: |
#include <iostream> #include <sstream> #include <string> // für einfacheres string-handling
using namespace std;
int main() { int zahl; string buf, text; istringstream isstr;
getline(cin, buf); isstr.str(buf); isstr >> zahl;
getline(cin, text);
cout << text << " -- " << zahl << endl; }
|
Auf die Art liest du jeweils eine Zeile ein, baust daraus einen Eingabestream isstr und parst daraus die Zahl, dementsprechend bleiben die Überreste nicht in cin, sondern in isstr hängen, und werden da einfach vergessen. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 19.10.2006 um 13:41 Uhr von 0xdeadbeef editiert. |