Umwandlung Von Kleinbuchstabe Zu Großbuchstabe



  • Ich möchte, dass mein Programm nach Eingabe eines Kleinbuchstaben, ihn in einen Großbuchstaben umwandelt.

    #include <stdio.h>
    #include <ctype.h>
    
    int main(void)
    {
        unsigned char buchstabe;
    
        printf("Geben Sie einen kleinen Buchstaben ein: ");
        scanf("%c", buchstabe);
    
        buchstabe = toupper(buchstabe);
    
        printf("konvertierter Buchstabe: %c", buchstabe);
    }
    

    Ich bekommen beim ausführen einen Laufzeitfehler.
    Wenn ich als Platzhalter "%d" einsetze anstatt "%c", läuft das Programm zwar, aber nicht mit dem gewünschten Ergebnis.


  • Mod

    scanf("%c", &buchstabe);
    


  • scanf("%c", &buchstabe);
    

    Den Adress-Operator (&) vergessen.



  • Gibt es vielleicht eine Möglichkeit die Umwandlung mit Bitoperatoren oder anders zu lösen?

    Habe mir die Ascii-Tabelle mal angeguckt und einige Buchstaben in Bitnotation aufgeschrieben.

    'a' = 0110 0001
    'A' = 0100 0001

    'e' = 0110 0101
    'E' = 0100 0101

    Habe festgestellt das sich jeweil nur das rechte Halbbyte ändert.

    Hat jemand eine Idee wie man das ohne toupper() realisieren kann?



  • Fina schrieb:

    Gibt es vielleicht eine Möglichkeit die Umwandlung mit Bitoperatoren oder anders zu lösen?

    Habe mir die Ascii-Tabelle mal angeguckt und einige Buchstaben in Bitnotation aufgeschrieben.

    'a' = 0110 0001
    'A' = 0100 0001

    'e' = 0110 0101
    'E' = 0100 0101

    Habe festgestellt das sich jeweil nur das linke Halbbyte ändert.

    Hat jemand eine Idee wie man das ohne toupper() realisieren kann?



  • Fina schrieb:

    Gibt es vielleicht eine Möglichkeit die Umwandlung mit Bitoperatoren oder anders zu lösen?

    Wenn du sicher bist das du nur mit ASCII arbeitest:
    Es ändert sich nur das Bit 5 (ganz rechts ist 0) mit dem Wert 32.

    Also kannst du den Wert verodern (hier bleibt ein Kleinbuchstabe auch einer)

    buchstabe = buchstabe | 32;
    

    oder dazuaddieren

    buchstabe = buchstabe + 32;
    

    als Kurzform:

    buchstabe |= 32;
    buchstabe += 32;
    

    Das ist aber nicht portabel und scheitert schon bei Umlauten und allen anderen Zeichen z.B.: wird ein '!' dann ein 'A'. 😮



  • Ansonsten:

    if(buchstabe >= 'a' && buchstabe <= 'z') buchstabe |= 32;
    

    Warum willst du eigentlich kein toupper verwenden?



  • Also wennschon dann richtig

    if(buchstabe >= 'a' && buchstabe <= 'z') buchstabe -= 32;
    

    oder

    if(buchstabe >= 'a' && buchstabe <= 'z') buchstabe &= 0xdf;
    

Log in to reply