c - printf 函数在输入之前不起作用
问题描述
我正在尝试编写一个程序,从用户那里获取一些详细信息并将详细信息打印到屏幕上,我正在等待 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
写入FILE *
命名的stdout
.
您需要了解的第二件事是 aFILE *
是缓冲的或非缓冲的。缓冲意味着您编写的输出(使用 eg printf
)在实际写入终端之前存储在一些内部存储器中。
默认情况下,当stdout
连接到普通终端或控制台时,stdout
则为line buffered。行缓冲意味着缓冲区的内容写在换行符上。但是如果stdout
连接到管道(这对于使用自己的输出处理的 IDE 来说很常见),那么stdout
就会完全缓冲。然后仅当缓冲区已满或您显式刷新它(例如fflush(stdout)
)时才写入输出。
stdout
在这种情况下,您似乎是从这样一个完全缓冲的 IDE 运行的。
推荐阅读
- c - 通过 LIBXML2 问题读取 XML
- python - 使用 scikit-learn PCA.score() 时出错
- apache-spark - spark中的动态查询准备和执行
- javascript - 将 JS 属性设置为 object 或 null
- opencv - GStreamer-CRITICAL **:gst_element_get_state:Opencv 中的断言“GST_IS_ELEMENT(元素)”失败错误
- core-data - 使用自定义按钮(CoreData)删除单元格项目时应用程序崩溃
- reactjs - 如何在 React js 中渲染多个“vis-react”组件
- node.js - 未在 npm 中返回公共 ip
- prometheus - 如何对从多个 Prometheus 实例抓取相同目标的 remote_write 发送的数据进行重复数据删除
- python - R^2 负使用 sklearn 和 0.92 使用 statsmodels