printf und scanf in C



  • Hallo erstmal,
    ausgehend vom Informatikunterricht beschäftige ich mich seit ca. einem halben Jahr mit Java. Nun wollte ich mich ein bisschen in C umsehen:

    Nun zum Problem: Obwohl ich den getchar()-Befehl benutze, schließt sich die Konsole sofort nachdem ich die Zahl eingegeben und mit Return bestätigt habe.

    #include <stdio.h>
    
    int main( void ) {
         /* printf("Das ist ein Test!\n");
         printf("\n"); */
         int i;
         printf("Testwert: ");
         scanf("%d",&i);
         printf("Der Testwert %d ist ein Integer\n",&i);
         getchar();
         return 0;
    }
    


  • Hallo,
    ich vermute mal das im Tastaturpuffer noch das Return gespeichert ist und für das getchar verwendet wird.
    Umgehen kannst du das, in dem du z.B. den Tastaturpuffer leerst (z.B.:vor getchar stdin(fflush) - funktioniert nicht uner Linux ) oder diesen Puffer mit z.B. einer dowhile-schleife auffängst:

    do {scanf("%c",&c);} while ( getchar() != '\n' );

    (entschuldigt wenn mein Beitrag mit euren Regeln nicht konform geht, habe mich kurzerhand registriert um auf die Frage zu antworten ...)

    mfG



  • Nachtrag:
    Jetzt hab ich glatt in Eile einen Schusselfehler eingebaut, grml ...
    sollte fflush(stdin) heissen, nicht stdin(fflush) ... ergibt ja sonst überhaupt keinen Sinn.



  • #include <stdio.h>
    
    int main( void ) {
        float test;
        printf("Testwert:\t");
        scanf("%f",&test);
        printf("Der Testwert lautet %f",&test);
        fflush(stdin);
        getchar();
        return 0;
    }
    

    Nun klappt es, Konsole bleibt offen 😃 Danke.

    Leider hab ich jetzt ein weiteres Problem...meine Ausgabe sieht folgendermaßen aus:

    Testwert: 3.14
    Der Testwert lautet 0.000000
    


  • Hallo, ich nochmal ...
    printf("Der Testwert lautet %f",&test); < da den Adressoperator weglassen (willst ja den Wert und nicht die Adresse der Variablen darstellen), also:

    printf("Der Testwert lautet %f",test);

    um die Nullen wegzubekommen, musst du nach dem % und vor dem f noch einen . und eine Zahl tippen, in etwa so:

    printf("Der Testwert lautet %.2f",test);

    denke, so müsste es gehen.

    mfG



  • Nein, nimm kein fflush(stdin);. Das ist vom Standard her nicht in Ordnung. Vielleicht geht es gerade zufällig mit der Version des Compilers, die du benutzt. Aber bei einer kleinen Änderung fliegt es dir schneller um die Ohren, als du glaubst!

    Siehe lieber hier http://www.c-plusplus.net/forum/viewtopic-var-t-is-111042.html



  • nimm lieber gleich kein fscan, es nervt, vorallem, wenn man viel eingabelastigen code schreibt mit vielen unterschiedlichen typen etc.

    fgets(buf, MAX, stdin);
    sscanf(buf, "%f", &var);

    ist doch viel netter.



  • meine natürlich scanf !



  • zu deinem getchar() problem.. ich nehme dafür immer getch(); und damit hatte ich nei probleme. bei manchen IDEs zb DevCpp brauchste aber conio.h dafür.



  • yus schrieb:

    zu deinem getchar() problem.. ich nehme dafür immer getch(); und damit hatte ich nei probleme. bei manchen IDEs zb DevCpp brauchste aber conio.h dafür.

    ...und es ist nicht Standard.



  • Danke für die Antworten,
    hab mir jetzt einen eigenen Header geschrieben der die Konsole offen hält (die Lösung aus dem C++ Bereich) 😃


Anmelden zum Antworten