【问题标题】:printf function not working before the inputprintf 函数在输入之前不起作用
【发布时间】:2019-05-11 09:52:10
【问题描述】:

我正在尝试编写一个程序,从用户那里获取一些详细信息并将详细信息打印到屏幕上,我正在等待 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

【问题讨论】:

  • fflush(stdout)scanf() 之前。 – scanf("%s", id) 永远不要那样做!使用%s时始终指定宽度!
  • 奇怪的是换行符没有刷新输出,你的操作系统是什么?
  • 您能否提供一些有关您尝试应用程序的系统的详细信息。在?尽管fflush(stdout)(@Swordfish 提示)可能会有所帮助,但我想知道为什么它是必要的。
  • @Agar123 你的操作系统是什么?你是在终端上运行还是在 IDE 下运行?

标签: c


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 2020-05-17
    • 2020-01-05
    • 1970-01-01
    • 2016-01-31
    相关资源
    最近更新 更多