Probleme mit Scanf() und Printf()



  • Hallo zusammen,
    ich bin noch ziemlich am Anfang mit dem Programmieren und habe letztes Jahr eine Ausbildung als Fachinformatiker angefangen. Da wir in den nächsten Tagen eine neue Programmiersprache lernen (C), wollte ich mich nun schonmal im voraus ein wenig damit befassen.
    Ich habe deshalb einen ziemlich simplen Code geschrieben, welcher einfach nur mithilfe eines Scanners eine Zahl einlesen soll und diese daraufhin wieder ausgeben soll. Doch leider funktioniert dies nicht so ganz wie ich mir das vorstelle.
    Hier der Code:


    #include <stdio.h>
    #include <stdlib.h>

    int main(void) {
    int zahl;

    printf("Bitte geben Sie eine Zahl ein: ");
    scanf("%d", &zahl);
    
    printf("Sie haben folgende Zahl eingegeben: %d", zahl);
    return EXIT_SUCCESS;
    

    }


    Problem bei dem Ganzen ist, dass er die erste printf()-Funktion nicht ausgibt. Er gibt diese erst aus, nachdem ich schon eine Zahl eingegeben habe. Sprich die Konsole ist leer und erst nachdem ich eine Zahl eingebe, wird mir "Bitte geben Sie eine Zahl ein: " ausgegeben. Dies sollte jedoch schon ganz am Anfang ausgegeben werden.
    Ich hoffe man versteht ansatzweise was ich meine.
    Kann natürlich auch sein, dass ich irgendeinen Fehler bei der Installation meiner Entwicklungsumgebung gemacht habe (Ich benutze Eclipse). Da ich diese jedoch schon 5 mal neu installiert habe und das Problem immer noch nicht behoben ist denke ich, dass es auch daran nicht liegen kann.



  • Das Problem ist, dass bei dir die Ausgabe standardmäßig gepuffert wird - d.h. die Ausgabe erfolgt erst, sobald du den Puffer "flush"st. Wenn du die Ausgabe mit \n beendest (also neue Zeile), geschieht dies automatisch. Also:
    printf("Bitte geben Sie eine Zahl ein:\n");

    Wenn du aber keine neue Zeile willst, musst du manuell flushen oder den Puffer deaktivieren. (siehe mal fflush(stdout) -> https://en.cppreference.com/w/c/io/fflush bzw. setbuf(stdout, NULL); -> https://en.cppreference.com/w/c/io/setbuf)



  • Wenn ich das Programm unter Linux übersetze im Terminal, macht es das was es soll. Insofern kann das Problem nur daran liegen, wie Eclipse mit dem OS bei Dir interagiert.



  • @paul-5 Die Konsole von Eclipse ist für derartige Spirenzchen bekannt.

    Starte das Programm mal aus cmd.exe (die Konsole von Windows) heraus.



  • @paul-5 sagte in Probleme mit Scanf() und Printf():

    Fachinformatiker

    lol



  • @john-0 sagte in Probleme mit Scanf() und Printf():

    Wenn ich das Programm unter Linux übersetze im Terminal, macht es das was es soll. Insofern kann das Problem nur daran liegen, wie Eclipse mit dem OS bei Dir interagiert.

    Ja, das mag ja sein. Der Standart schreibt stdout nicht vor ob oder wie es gepuffert sein darf.


Anmelden zum Antworten