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

标签 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

最佳答案

您需要了解的第一件事是使用 printf 写入名为 stdoutFILE *

您需要了解的第二件事是 FILE * 是缓冲的或非缓冲的。缓冲意味着您写入的输出(使用例如 printf)在实际写入终端之前存储在一些内部存储器中。

默认情况下,当 stdout 连接到普通终端或控制台时,stdout行缓冲。行缓冲意味着缓冲区的内容写在换行符上。但是,如果 stdout 连接到管道(这对于使用自己的输出处理的 IDE 很常见),则 stdout完全缓冲。然后仅当缓冲区变满或您显式刷新它(例如使用 fflush(stdout))时才写入输出。

在这种情况下,您似乎正在从这样一个将 stdout 完全缓冲的 IDE 运行。

关于c - printf 函数在输入之前不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56089143/

相关文章:

将 C 数组中的元素复制到另一个数组中

c - 声明带有存储类说明符但没有类型说明符的变量是什么意思?

c - 是否可以使用 gcc 提高浮点算术的准确性?

c++ - 检查va_list是否为数组类型

c - 如何使用有故障的内核模块 - FC19 使系统崩溃?

c - 进程的信号如何影响其子线程?

c - 为什么用-fpic和-pie编译的程序会有重定位表?

c - 我应该在大学学习完 C 语言类(class)后阅读 K&R 吗?

c - Windows 10 : Clang, "stdio.h"找不到

c - 了解这种情况下的悬挂指针行为