kleine Zeichen in Großbuchstaben

  • Hallo Leute,

    diesmal bin ich dabei ein Proggie zu schreiben, dass 10 kleine Zeichen einliest und diese dann in Großbuchstaben einliest.

    Zunächst habe ich das für ein Zeichen gemacht.

    Zitat


    #include <stdio.h>

    void main()
    {
    char zeichen;

    printf("Zeichen: ");
    scanf("%c",&zeichen);

    printf("%c\n",zeichen-32);
    }


    Das funktioniert wie es soll.

    Jetzt habe ich die Eingabe von 10 Zeichen in einem Array speichern wollen und dann wieder ausgeben, aber er liest mir nur 5 ein und die Ausgabe sieht komisch aus.


    Was mache ich falsch?

    EDIT: Ich hab´s grad rausgefunden. Habe am Ende der ersten For-Schleife einfach den Tastaturpuffer mit flushall(); gelöscht.
    Und jetzt geht alles.


    Vielen vielen Dank!

  • 1. Dein Programm ist nicht portabel und nicht sprachunabhängig: Nicht alle Zeichensätze haben einen Abstand von 32 zw. Groß- und Kleinbuchstaben. Nicht alle Buchstaben sind in diesem Schema (z.b. öäüß).
    2. Es gibt die C-Funktion int toupper(int char), die portabel und sprachunabhängig ist.
    3. Was ist flushall()? Jedenfalls keine Standard-C-Funktion.
    4. Ein einzelnes Zeichen liest du bequemer und ohne alle scanf-Nachteile mit getchar() ein.

    Dipper dipper dii dipper dii dipper dii duuu

  • Hallo,

    danke für die Hinweise. Mein Prof. sagt uns immer, wir sollen mit den Mitteln arbeiten die wir bis jetzt kennen gelernt haben. Deshalb habe ich das so "einfach" gemacht.
    toupper(int char) kenne ich noch nicht wirklich, aber ist interessant.
    Um das flushall(); kann man einfach bei scanf zwei mal %c%c eingeben sagte mein Prof.. Aber wie flushall(); funktioniert, darauf ist er nicht wirklich eingegangen.

    Ich habe die erste for-Schleife folgendermassen verändert

    Aber bei der Ausgabe bekomme ich für jedes Zeichen 1/4.

  • Du musst natürlich schon noch immer die Rückgabe von getchar irgendwo speichern:

    Code
    zeichen[i] = getchar();


    Und das flushall() vergiss einfach, das sollte auch so funktionieren.

    Dipper dipper dii dipper dii dipper dii duuu

  • Ah, wundert mich dass es in dem tutorial von pronix nicht so drin steht.

    Kann das Array mit char zeichen[anzahl] definiert werden oder mit int zeichen[anzahl] oder ist das egal?

    Weil bei Pronix scheint es egal zu sein. Aber das heisst praktischer ist immer int oder?

    Zitat


    'getchar' dient zum Einlesen einzelner Zeichen von Tastatur. Sie werden jetzt sicher verwundert sein das der Rückgabewert von 'getchar' vom Typ 'int' ist. Nun das liegt daran das ein char vor seiner Verwendung in einem Ausdruck in ein 'int' konvertiert wird. Wenn Ihnen der tiefere Hintergrund darüber interessiert können sie den Text im folgenden Rahmen lesen, wenn nicht können sie ihn auch überspringen.

    Das Problem der Verwendung von int liegt an der Konstanten EOF (End of File) die das Ende einer Eingabe anzeigt. EOF ist meist als -1 definiert, damit sie nicht mit den normalen ASCII - Zeichen kollidiert. Nun früher als noch 127 Zeichen verwendet wurden war das kein Problem. Heute kommt es oft vor das Zeichen größer wie 127 gelesen werden wie z.B. ä,ö,ü.....! Daher wird char oft mit unsigned deklariert und kann somit Zeichen zwischen 0...255 lesen. Nun ist aber kein Platz mehr für EOF. Man hat dann einfach den Rückgabewert von 'getchar' als int deklariert und damit können sowohl die 256 Zeichen als auch das EOF übermittelt werden.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!