Ausführungsreihenfolge?



  • #include<stdio.h>
    
    int main(void) {
    	printf("Hello World!");
    	getchar();
    }
    

    Hallo und guten Morgen,

    kann mir einer erklären, warum in diesem Beispiel zuerst auf die Eingabe eines Zeichens gewartet wird und dann im Anschluss "Hello World ausgegeben wird? (Bitte nicht die Details weglassen)

    Vielen Dank
    MfG
    dertyphier



  • Die Zeichen werden vor der Ausgabe in diversen Puffern zwischengespeichert, und letztlich entscheidet das OS, wann es die Daten ausgibt.

    Das printf() wird ganz sicher vor dem getchar() ausgeführt. Nur die Ausgabe erfolgt nicht sofort.

    Das ist natürlich ärgerlich, allerdings in dem Beispiel wohl nicht so tragisch.
    Passiert das auch, wenn Du z.B. ein prompt ausgibst und eine Benutzereingabe einliest? Z.B.

    int i;
    ...
    printf("eingabe: ");
    scanf("%d", &i);
    


  • int main(void) {
    	int i;
    	printf("Hello World!");
    	scanf("%d", &i);
    	getchar();
    }
    

    passiert immer noch dasselbe, er wartet erst auf eine Eingabe eines einzelnen Zeichens und führt dann die Ausgaben aus, dabei überspringt er scanf komplett. Bzw. es könnte auch sein, dass getchar() das erste eingegebene Zeichen liest und scanf dann das Enter.
    Mich würde wirklich interessieren was da intern passiert.



  • Benutzt du evtl Eclipse?

    scanf wird sicher nicht übersprungen.
    Du mußt aber, damit scanf mit dem Lesen aufhört, ein Zeichen eingeben, dass nicht zu %d passt (Buchstabe, Leerzeichen, Sonderzeichen).
    Dieses Zeichen wird dann aber gleich durch getchar eingelesen.



  • nope, ich arbeite im notepad++



  • aber die interne konsole von npp macht den gleichen mist wie vermutlich auch die von eclipse...

    hmm k, warum auch immer.



  • dertyphier schrieb:

    int main(void) {
    	int i;
    	printf("Hello World!");
    	scanf("%d", &i);
    	getchar();
    }
    

    passiert immer noch dasselbe, er wartet erst auf eine Eingabe eines einzelnen Zeichens und führt dann die Ausgaben aus, dabei überspringt er scanf komplett. Bzw. es könnte auch sein, dass getchar() das erste eingegebene Zeichen liest und scanf dann das Enter.
    Mich würde wirklich interessieren was da intern passiert.

    DirkB hat ja geschrieben, was da passiert( scanf() liest eine evtl. vorhandene Zahl, getchar() liest das nächste Zeichen (das erste was keine Zahl ist, z.B. '\n')).

    Das ist ein wenig störend, dass die Ausgabe nicht vor der Eingabe angezeigt wird...versuch mal irgendwas mit i zu machen nach dem einlesen... ("StochertImNebel")

    Wg. Interna:
    erstmal schauen, was printf()/scanf() machen, dann die Implementierung der beiden in Deiner C-Bibliothek und zuguterletzt noch die Dokumentation Deines Betriebssystems bezüglich I/O anschauen.



  • Du nutzt den Notepad++ Editor mit NppExec?

    Wie sieht da dein Programmaufruf aus?

    Ich kann damit das bei diesem Quelltext erwartete und deinen Effekt nachvollziehen. Wenn es sein mus, direkt nacheinander. 😮



  • Starte das Programm doch mal aus CMD raus.



  • Probiers doch mal mit fflush(stdout)


Anmelden zum Antworten