在输入之前,printf函数不起作用

时间:2019-05-11 09:52:10

标签: c

我试图编写一个程序,该程序从用户那里获得一些详细信息,然后将这些详细信息打印到屏幕上,我正在等待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 个答案:

答案 0 :(得分:5)

您需要学习的第一件事是使用printf写入名为FILE *的{​​{1}}。

您需要学习的第二件事是stdout是缓冲的还是未缓冲的。缓冲意味着您写入的输出(例如,使用FILE *)在实际写入终端之前已经存储在内部存储器中。

默认情况下,当printf连接到普通终端或控制台时,stdout行缓冲。行缓冲表示将缓冲区的内容写入换行符。但是,如果stdout连接到管道(这是IDE使用其自身的输出处理方法常见的),则stdout将被完全缓冲。然后,仅在缓冲区已满或您明确刷新(例如,使用stdout)时才写入输出。

在这种情况下,您似乎是在这样的IDE上运行的,它使fflush(stdout)处于完全缓冲状态。