Doppelte Ausgabe bei printf



  • Hallo an alle,
    ich bin ein absoluter Beginner, was die C-Programmierung anbelangt und arbeite mich gerade durch das Kernighan/Ritchie-Buch.
    Bei folgendem Code habe ich ein Problem:

    #include <stdio.h>
    
    main()
    {
        int c;
        while (c = getchar() != EOF)
            printf("%d \n", c);
    }
    

    Die Ausgabe soll mir eine 1 liefern, wenn das eingelesene "c" ungleich EOF ist. Ich bekomme aber immer Folgendes, z.B. gebe ich "a" ein und erhalte dann zwei Einsen, also
    a
    1
    1
    und dann wartet er auf die nächste Eingabe.
    Warum erscheint die "1" doppelt ?? Ich habe doch nur einen printf-Befehl ?

    Wäre echt schön, wenn mir jemand helfen könnte.
    Danke im Voraus,
    M.



  • Du hast c als int deklariert. Mach es zu einem char, dann sollte es klappen.
    Warum bei der Ausgabe lauter 1 rauskommt, ist mir allerdings auch nicht ganz klar.

    PS: "Doppelt" ist es deswegen, weil du 2 Zeichen eingegeben hast: 'a' und 'return'



  • Na klar, das isses.
    Super, vielen Dank !!! 👍 👍 👍 👍



  • while (c = getchar() != EOF)
    

    😮
    du meintest doch sicher

    while ((c = getchar()) != EOF)
    

    Ansonsten wird c immer nur die Werte "1" oder "0" annehmen.



  • Danke, damit hast du auch meine Frage beantwortet 😉



  • Hallo Javaner,
    nein, ich meinte schon, dass "c" nur die Werte 0 und 1 annehmen soll.
    Die Klammern bei der while-Schleife waren also richtig gesetzt. Aber hat sich ja nun geklärt, vielen Dank trotzdem ! 🙂 🙂


Anmelden zum Antworten