Warum wiederholt er mein geschriebenes Wort?
-
Hey, ich bin gerade dabei C++ zu lernen. Einige Leute werden den Quellcode hier vielleicht sogar erkennen. In diesem Code gibt er immer mein geschriebenes Wort wieder aus und ersetzt dann $ oder # in ein geschriebenes Wort [Dollarzeichen] usw.
Meine Frage, was in diesem Quellcode veranlasst, dass mein geschriebenes Wort aber wiederholt wird? Bitte um Verständnis Hilfe ^^
Der Code:
#include <iostream> using namespace std; int main() { int ch; // EOF kann mit STRG+Z bzw. STRG+D ausgelöst werden while ((ch = cin.get()) != EOF) { switch ((char)ch) { case '$': // Hier auf das Dollarzeichen reagieren ... cout << "[Dollerzeichen]"; break; case '#': // Hier auf das #-Zeichen reagieren ... cout << "[Hash-Zeichen]"; break; // ... usw default: cout << (char)ch; } } return 0; }
-
Was passiert denn in default?
-
Da gibt er einfach das geschriebene Wort aus. Da ist es auch verständlich. Allerdings gibt es bei den cases nicht so ein cout.
-
Enthält ch ein Wort?
-
Ja, sobald ich was eingebe.
Aber default wird ja nur ausgeführt wenn keiner der Cases eintrifft?!
-
int ist also in C++ ein Datentyp, der Wörter aufnimmt?
-
Durch
switch ((char)ch)
wird die Variable gecastet und somit als Wort ausgegeben. Also werden die Buchstaben in Zahlen umgewandelt, damit int damit umgehen kann.
-
Wie passt denn ein ganzes Wort in ein int?
Nimmt char ein Wort auf?
-
Das hat was mit dem sogenannten "casten" zu tun. Ich kann mir vorstellen das er einfach die Buchstaben in die Char Werte umwandelt. ^^
-
Jetzt schwurbelst du nur noch. Offensichtlich ist mindestens eine deiner Annehmen falsch. Du solltest also die Fragen nochmal durchgehen. Mit einem Debugger kann man sich auch den Programmablauf genauer ansehen.
-
DubiTG schrieb:
Das hat was mit dem sogenannten "casten" zu tun. Ich kann mir vorstellen das er einfach die Buchstaben in die Char Werte umwandelt. ^^
cin.get() holt immer nur ein Zeichen ab. In dem Moment, wo Du per Enter-Taste das Einlesen veranlasst, wird die Schleife also für jeden Deiner eingegebenen Buchstaben ausgeführt. Für jedes Zeichen ungleich $ oder # wird dann in den default- Zweig gesprungen und das Zeichen ausgegeben - eines nach dem anderen, und nicht, wie Du wahrscheinlich vermutest, alle auf einmal ...
-
Klasse! Vielen Dank ^^
Ja genau so hatte ich das vermutet