c - printf 没有按预期工作。有人可以解释输出吗?
问题描述
我正在尝试从键盘读取两个字符串并打印它们。为什么会printf("read 1st\n")
在秒后运行scanf()
?
#include <stdio.h>
int main(void)
{
char str[20];
char str2[20];
scanf("%s", str);
printf("read 1st\n");
scanf("%s", str2);
printf("read 2nd\n");
printf("str: %s\nstr2: %s\n", str, str2);
return 0;
}
Expected:
foo
read 1st
bar
read 2nd
str: foo
str2: bar
Actual:
foo
bar
read 1st
read 2nd
str:foo
str2:bar
解决方案
我无法重现您的问题,但添加 afflush(stdout);
应该可以解决您的问题。
scanf("%s", str);
printf("read 1st\n");
fflush(stdout); // Ensures that the above is printed before scanf is executed
scanf("%s", str2);
printf("read 2nd\n");
我还将扫描更改为scanf("%19s", str);
. 否则,如果您输入的字符串超过了str
可以容纳的长度,可能会发生不好的事情。
推荐阅读
- excel - 匹配三个条件并复制粘贴数据
- arrays - 将 SUM 行添加到 google sheet 中的查询
- react-native - 虚拟键盘上的自动滚动关闭键盘本身
- javascript - Express 路由器未按预期路由
- jsf - 错误:MAC 没有验证,仅在使用域名访问时
- python - 任何人都可以帮助解释为什么这个 Python 代码输出:[0]
- javascript - 三个 JS 平面缓冲区几何中的网格位置未更新
- azure-iot-hub - 卡在网络 azure-iot-edge-dev 是外部的,正在跳过
- android-studio - Android北极狐无限gradle构建运行
- r - 使用 conditionalPanel() 和 fileInput() 根据单选按钮输入不同的文件类型