Функция printf не работает до ввода - PullRequest
1 голос
/ 11 мая 2019

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

#include <stdio.h>

#define THIS_YEAR 2018

int calcAge(int year);

int main() {

    char id[20];
    int year;
    char gender;
    float height;

    printf("Please enter your year birth\n");
    scanf("%d", &year);

    printf("Please enter your id\n");
    scanf("%s", id);

    printf("please enter your gender\n");
    scanf(" %c", &gender);

    printf("please enter your height\n");
    scanf("%f", &height);

    printf(
            "Your id : %s , your age : %d , your gender : %s , your height : %.2f",
            id, calcAge(year), (gender == 'f') ? "FEMALE" : "MALE", height);

    return 0;
}

int calcAge(int year) {

    return THIS_YEAR - year;
}

Вывод:

1991
203835568
f
1.73
Please enter your year birth
Please enter your id
please enter your gender
please enter your height
Your id : 203835568 , your age : 27 , your gender : FEMALE , your height : 1.73

1 Ответ

5 голосов
/ 11 мая 2019

Первое, что вам нужно выучить, - это использовать printf запись в FILE * с именем stdout.

Второе, что вам нужно узнать, это то, что FILE * либо буферизован, либо небуферизован. Буферизация означает, что вывод, который вы записываете (например, printf), сохраняется в некоторой внутренней памяти до того, как он будет фактически записан в терминал.

По умолчанию, когда stdout подключен к обычному терминалу или консоли, тогда stdout является буферизованной линией . Строковая буферизация означает, что содержимое буферов записывается на новой строке. Но если stdout подключен к каналу (что характерно для IDE, использующей собственную обработку вывода), тогда stdout становится полностью буферизованным. Затем вывод записывается только в том случае, если буфер заполнен или вы явно очищаете его (например, fflush(stdout)).

В этом случае кажется, что вы работаете с такой IDE, которая превращает stdout в полную буферизацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...