Hallo, kann mir einer sagen was eigentlich genau passiert wenn ich versuche mit einem "cin" einen Buchstaben auf eine int-Variable zu schreiben? Ich hätte erwartet dass nun z.b. der Wert des Zeichen da steht, aber scheinbar entsteht noch viel größerer Bockmist. Was genau wird hier also geschrieben? Danke für die Nachhilfe ;-)
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.
Ja, ich "arbeite" momentan mit Codebocks (gcc) und mir wurde die Frage selbst auch nur gestellt, denn wenn man z.B. eine Schleife aufbaut und dann den Buchstaben der in die int geschrieben wurde mit einer Switch Anweisung auswertet steht zwar eine Null in der Variable, aber die Schleife wird nun unendlich oft durchlaufen. Ich persönlich hätte die Abfrage entweder nur auf Char laufen lassen oder halt vorher Buchstaben ausgeschlossen mittels einer Abfrage (eventuell gibts auch auch besser Methoden um später auch Mehrstellige Zahlen für switch Anweisungen zuzulassen). Er hatte aber eine int Abfrage gestartet und dort kommt es halt zu diesem Phänomen, weshalb ich dachte das vielleicht irgendwelche Nachbarbereiche beschrieben werden. Und ich hätte jetzt nicht zwangsläufig korrekten Ascii Code erwartet, aber halt irgendwelche Zahlen die dann darin stehen.
Achso als Anmerkung, am Anfang der Schleife steht das cin, auch ein neu beschreiben der Variable mit Null oder auch die Funktion cin.sync(); bringt da nichts neues.
Noch mal ich, wahrscheinlich würde es mir helfen wenn ich die Register einsehen könnte, ist das mit Codeblocks möglich bzw. gibt es ein Programm mit dem so was gut durchführbar ist?
Hm ich habs gefunden, du hattest natürlich recht, es sind noch Fehlerbits gesetzt und den Eingabespeicher muss man natürlich auch leeren. Sry für die blöde Fragerei und danke für die Hilfe.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.