2017-07-21 2 views
1

Dies ist mein Code [Anmerkung: Ich bin Eclipse-Verwendung für C/C++ auf Windows-Plattform]Warum wird printf nicht wie erwartet aufgerufen?

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

int main(void) { 
    int num; 
    printf("Enter a number:\n"); 
    scanf("%d",&num); 
    if(num%2==0) 
     printf("Number is Even"); 
    else 
     printf("Number is Odd"); 
    return EXIT_SUCCESS; 
} 

Hier muss ich nur dann zuerst einen Integer eingeben printf genannt wird ... Ich will zuerst printf anrufen bevor ich einen Integer gebe ... Was mache ich hier falsch?

zum Beispiel ist dies die Ausgabe, dass ich

bekommen
6 
Enter a number: 
Number is Even 

und erwartete Ausgabe ist

Enter a number: 
6 
Number is Even 
+1

Ist das Problem, dass 'scanf' nicht zurückkommt, oder dass der letzte Aufruf von' printf' keine Ausgabe erzeugt? –

+0

Pleast post a [MCVE]. Insbesondere, welche Umgebung Sie verwenden. Verwenden Sie eine normale Shell oder lesen/schreiben Sie Input/Output aus einer Datei oder einer Pipe? – EOF

+1

Wenn das Programm "stdin/stdout" nicht als "interaktives Gerät" erkennt, wird es vollständig gepuffert. In diesem Fall kann die Ausgabe zwischengespeichert werden, bis ein Aufruf von 'fflush (stdout)' (oder einer von mehreren anderen Funktionsaufrufen) auftritt. – EOF

Antwort

0

Sie rufen fflush kann (stdout) nach der ersten printf die gepufferte Ausgabe zu drucken. Aber wenn Sie in Zukunft überlegen, wenn Sie das Programm mit mehr printfs erweitern, dann fügt das Hinzufügen von fflush nach jedem printf einen Overhead hinzu. So können Sie

setbuf (stdout, NULL)

kurz vor allen printfs hinzuzufügen. Dadurch wird sichergestellt, dass keine Ausgabe gepuffert wird und Sie die Drucke sofort sehen.

Verwandte Themen