Это мой код [Примечание: я использую Eclipse для C / C ++ на платформе Windows]

#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;
}

Здесь я должен сначала ввести целое число, только после этого вызывается printf ... Я хочу сначала вызвать printf, прежде чем я введу целое число ... Что я здесь делаю не так?

Например, это результат, который я получаю

6
Enter a number:
Number is Even

И ожидаемый результат

Enter a number:
6
Number is Even
4
Ajinkya 21 Июл 2017 в 14:33
1
Проблема в том, что scanf не возвращается или последний вызов printf не производит вывода?
 – 
Scott Hunter
21 Июл 2017 в 14:36
1
Если программа не распознает stdin/stdout как "интерактивное устройство", оно будет полностью буферизовано. В этом случае вывод может буферизоваться до тех пор, пока не встретится вызов fflush(stdout) (или один из ряда других вызовов функций).
 – 
EOF
21 Июл 2017 в 14:43
9
Попробуйте printf("Enter a number:\n");fflush(stdout);
 – 
BLUEPIXY
21 Июл 2017 в 14:46
3
Обратите внимание, что ваш вопрос должен быть таким: "Почему выходные данные printf() не появляются, когда ожидалось?" поскольку вы не представили никаких доказательств того, что вызовы не выполняются, а только то, что вы не видите ожидаемого результата.
 – 
Jonathan Leffler
21 Июл 2017 в 15:35
3
Для меня это нормально. Я не могу воспроизвести вашу проблему на GCC.
 – 
EsmaeelE
21 Июл 2017 в 18:29

1 ответ

Лучший ответ

Вы можете вызвать fflush (stdout) после первого printf, чтобы распечатать буферизованный вывод. Но учитывая, что в будущем, если вы расширите программу дополнительным количеством printf, то добавление fflush после каждого printf будет накладными расходами. Итак, вы можете добавить

setbuf (стандартный вывод, NULL)

Непосредственно перед всеми printfs. Это гарантирует, что никакой вывод не буферизуется, и вы сразу увидите распечатки.

1
apache 21 Июл 2017 в 21:45