Marc schrieb:
> Hallo, kann mir einer sagen was eigentlich genau passiert wenn ich
> versuche mit einem "cin" einen Buchstaben auf eine int-Variable zu
> schreiben?
Da passiert nicht allzu viel. Der >>-Operator versucht bei einer int-
Variable, eine Zahl (defaultmäßig im Dezimalsystem) im Eingabedatenstrom
zu parsen. Es wird also nur eine Folge von Ziffern (optional mit einem
vorangehenden Vorzeichen) akzeptiert. Das erste Zeichen, das nicht als
Bestandteil der Zahl interpretiert werden kann, beendet den Lesen der
Zahl.
Kann keine einzige Ziffer gelesen werden, weil das nächste Zeichen in
der Eingabe bspw. ein Buchstabe ist, ist der Lesevorgang fehlgeschlagen,
und der int-Variable kann kein sinnvoller Wert zugewiesen werden. Dann
wird das Fehlerflag ios::failbit gesetzt. Die Fehlerflags können mit
cin.rdstate() abgefragt werden.
Ich weiß nicht genau, welchen Wert die int-Variable gemäß C++Standard im
Fehlerfall haben sollte. Möglicherweise ist er undefiniert. Die Lauf-
zeitbibliothek des GCC scheint die Variable immer auf 0 zu setzen. Mög-
licherweise lassen andere Laufzeitbibliotheken die Variable einfach
unverändert. Wenn sie noch schon vorher initialisiert wurde, enthält sie
dann einen zufälligen Wert.
> Ich hätte erwartet dass nun z.b. der Wert des Zeichen da steht
Du meinst den ASCII-Code, also bei einem 'A' der Wert 65? Warum sollte
das so sein? Dann müsste ja konsequenterweise beim Zeichen '2' nicht der
Wert 2, sonder der Wert 50 in die Variable geschrieben werden.
Wenn du wirklich den ASCII-Code des nächsten Zeichens in de Eingabe
lesen möchtest, musst du statt einer int- eine char-Variable übergeben
und diese ggf. anschließend in ein int casten.