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 🙂


Log in to reply