programm verständnisproblem



  • HEY!

    Ich hab vorhin ein kleines Programm SELBST geschrieben das die getippten zeichen und ihre ASCII Codes anzeigt also ohne Enter. Das Programm tut genau das was ich verlange 🕶 ich versteh aber nicht wie das Programm funktioniert (unglaublich 😮 ). Kann mir das kurz jemand erklären.

    int z;
    int a;
    a = getch();
    z = a;
    	if(a) // oder z geht auch, wieso?
    	{
    		cout << "'" << z << "' wurde gedrueckt. ASCII Code: " << a << endl;
    	}
    

    Und ist dieser Code auch sicher? Also das nicht etwas böses während des Programmes passiert? Mit diesen getch kenne ich mich nicht so gut aus.

    Bin dankbar für jede Hilfe!!



  • Macht das Programm wirklich genau das, was du willst? Ich hätte mir an der Ausgabe jetzt etwas anderes erwartet 😃

    getch liefert dir den ascii - code als int (ganzzahliger Wert) zurück.
    Diesen speicherst du in der Variablen a ab.
    In der Folgezeile kopierst du den Wert 1:1 in z. Beide Variablen enthalten nun den gleichen Wert.

    Bei der Ausgabe solltest du aber explizit schon in einen char casten, wenn du wirklich das Zeichen haben willst, was du wünschst.

    cout << "'" << static_cast<char>(z) << "' wurde gedrueckt. ASCII Code: " << a << endl;
    
    	// oder ohne cast ganz implizit
    	char z;
    	int a;
    	a = getch();
    	z = a;
    

    mit getch() hab ich bisher keine schlechten Erfahrungen gemacht. Die Funktion kann auch net viel. Entweder drückt man ne Taste oder nicht.
    Aber andere wissen dazu eventuell mehr



  • Moin,

    wie kannst du ein Programm schreiben, ohne es zu verstehen? Hast du einfach so lange Dinge geändert, bis der Compiler nicht mehr gemeckert hat?

    Bei deinem Programm sehe ich nicht, wie es das tun könnte, was du beschreibst. Daher habe ich das mal getestet (mit kleinen Modifikationen, da es wohl getch() nur unter Windows gibt). Ergebnis:

    f
    '102' wurde gedrueckt. ASCII Code: 102
    

    Also Programm so geschrieben, dass es das tut, was deine Beschreibung besagt:

    #include <iostream>
    #include <cstdio>
    
    int main()
    {
        int a;
        a = getchar();
        if(a)
        {   
            std::cout << "'" << static_cast<char>(a) << "' wurde gedrueckt. ASCII Code: " << a << std::endl;
        }   
        return 0;
    }
    

    Nun bin ich auch kein C++-Kenner und kann dir nichts über Pro und Kontra erzählen, aber dieser Code sollte mit der Erklärung von BasicMan01 eigentlich selbsterklärend sein.

    MfG



  • ups ich habe mich beim z vertan da gehört natürlich ein char nicht int 🙄
    ich weis nicht wieso da int steht. Wenn man jetz f drückt sollte stehen: 'f' wurde gedrückt. ASCII Code: 102



  • MajorWar schrieb:

    ups ich habe mich beim z vertan da gehört natürlich ein char nicht int 🙄
    ich weis nicht wieso da int steht. Wenn man jetz f drückt sollte stehen: 'f' wurde gedrückt. ASCII Code: 102

    Weil du die Aufgabe falsch vom Zettel abgeschrieben hast!

    Lars



  • Mit diesen casten ist auch ne gute Idee halt nur mit einer Variable. Und was passiert jetzt mit den z(char) = a(int).



  • MajorWar schrieb:

    Mit diesen casten ist auch ne gute Idee halt nur mit einer Variable. Und was passiert jetzt mit den z(char) = a(int).

    Was genau willst du jetzt wissen?

    Wenn du einem char ein int zuweist, dann enthält danach deine char Variable das ensprechende ASCII Zeichen was zu dem Code gehört, der in deiner int Variable steht.

    Hoffe konnte dir helfen.

    Lg freeG



  • hmm ja schon Danke!
    An alle natürlich.


  • Mod

    Das ist eigentlich nicht richtig und erzeugt falsche Vorstellungen davon was ein char ist. Wenn man einem char einen int zuweist, so hat der char hinterher den Wert den der int hatte (eventuell ein paar mal umgebrochen, falls der Wert größer als der wertebereich eines chars ist). Denn chars sind auch nur Zahlen und man kann mit ihnen ganz normal rechnen, sie verhalten sich so zu int wie sich short zu int verhält, nur sind sie in der Regel noch kleiner als short.

    Alles was mit Zeichen zu tun hat kommt erst bei der Ausgabe zustande, weil die Ausgaberoutinen eine spezielle Routine haben die chars nicht wie üblich als ihren Dezimalwert ausgeben, sondern als ein Zeichen.



  • Ok, gut zu wissen, denn das wusste ich auch nicht:-P

    Lg freeG



  • SeppJ schrieb:

    Das ist eigentlich nicht richtig und erzeugt falsche Vorstellungen davon was ein char ist. Wenn man einem char einen int zuweist, so hat der char hinterher den Wert den der int hatte (eventuell ein paar mal umgebrochen, falls der Wert größer als der wertebereich eines chars ist). Denn chars sind auch nur Zahlen und man kann mit ihnen ganz normal rechnen, sie verhalten sich so zu int wie sich short zu int verhält, nur sind sie in der Regel noch kleiner als short.

    Alles was mit Zeichen zu tun hat kommt erst bei der Ausgabe zustande, weil die Ausgaberoutinen eine spezielle Routine haben die chars nicht wie üblich als ihren Dezimalwert ausgeben, sondern als ein Zeichen.

    Ja sowas habe ich mir schon gedacht 🙂



  • manni66 schrieb:

    MajorWar schrieb:

    ups ich habe mich beim z vertan da gehört natürlich ein char nicht int 🙄
    ich weis nicht wieso da int steht. Wenn man jetz f drückt sollte stehen: 'f' wurde gedrückt. ASCII Code: 102

    Weil du die Aufgabe falsch vom Zettel abgeschrieben hast!

    Lars

    👍


Anmelden zum Antworten