为什么使用 scanf() 时显示结果有延迟
why their is a delay in displaying result when using scanf()
今天我写了一个程序,其中使用了scanf()。 该程序是正确的,但是当我调试它时,即使我按回车键,程序也在等待输入,直到我按另一个数字/字符然后再次按回车键才显示结果。 在那一刻,它显示了输入的计算值。 我检查了我的代码,发现我在格式说明符后面放了一个空格。 当我删除空间时,它工作正常。
`scanf("%d ",&a);`
这种行为的原因是什么?
您的问题的答案在格式说明符的说明中(空格部分): http://www.cplusplus.com/reference/cstdio/scanf/
该函数将读取并忽略任何空格字符 在下一个非空格字符(空格)之前遇到 字符包括空格、换行符和制表符 -- 请参阅 ISSPACE)。 格式字符串中的单个空格验证任意数量的 从流中提取的空格字符(包括无)。
I/O 是缓冲的,您需要刷新它。
通过<stdio.h>
呼叫例如 fflush(NULL)
或fflush(stdout)
.阅读 fflush(3) 和相关手册页。
有了C++iostream做一个cout << std::flush
或cout.flush
(或者,正如 Jodag 所评论的那样,做一个输出换行符然后刷新的cout << std::endl
)。阅读有关 std::flush 等的信息。
对于scanf("%d ",&a)
,读者必须在数字之后获取非数字字符(可能是空格,或者获取行尾或文件结尾)。读取 scanf(3) 手册页。
我确实建议在scanf
之前刷新标准输出(有时,但并非总是自动完成)
顺便说一句,输入数字的首选C++方式可能是
std::cin >> a;
相关文章:
- 代码未在联机编译器上显示结果
- 我的循环超时并且不显示结果
- C 可执行文件从浏览器下载而不是显示结果
- 如果满足嵌套条件,则计算结果未显示结果C
- 使用 std::async 准备好后立即显示结果
- if, else if, else 函数未准确显示结果
- C++:如何在控制台窗口中显示结果
- VIM:执行复杂文件类型的脚本和显示结果
- 根据标准对结构向量进行排序,然后显示结果
- c++将var从一个函数传递到另一个函数,然后在主函数中显示结果
- 当结果超过 100 时,程序不显示结果
- 对输入'age'名称进行排序,然后显示结果
- 代码可以运行,但不在 Eclipse 中显示结果。
- 将代码C++到 MIPS 中,MIPS 中的代码运行时没有错误消息,但不显示结果
- 为什么使用 scanf() 时显示结果有延迟
- 如何使用信号和插槽从qt表单中获取id,然后在链表中搜索它并使用另一个表单显示结果
- C++不显示结果
- 最长公共子序列没有显示结果
- C++需要在Main()调试中显示结果的帮助
- C/C++读取UART端口并显示结果