0

今天我写了一个程序,其中我使用了scanf()。该程序是正确的,但是当我调试它时,即使我按下回车键,程序也在等待输入,直到我按下另一个数字/字符然后再次按下回车键才显示结果。在那一刻,它显示了输入的计算值。我检查了我的代码,发现我在格式说明符之后放置了一个空格。当我删除空间时,它工作正常。

 `scanf("%d ",&a);`

这种行为的原因是什么?

4

2 回答 2

2

I/O 已缓冲,您需要刷新它。

<stdio.h>呼叫例如fflush(NULL)fflush(stdout)。阅读fflush(3)和相关的手册页。

使用 C++ iostream 执行cout << std::flushor cout.flush (或者,正如jodag所评论的那样,执行 acout << std::endl输出换行符然后刷新)。阅读有关std::flush等的信息。

并且scanf("%d ",&a)读者必须在数字之后获取非数字字符(可能是空格,或者获取行尾或文件尾)。阅读scanf(3)手册页。

我确实建议在您之前刷新标准输出scanf(有时但并非总是自动完成)

顺便说一句,输入数字的首选 C++ 方式可能是

 std::cin >> a;
于 2013-09-19T19:21:10.953 回答
2

您的问题的答案在格式说明符(空白部分)的描述中: http ://www.cplusplus.com/reference/cstdio/scanf/

该函数将读取并忽略在下一个非空白字符之前遇到的任何空白字符(空白字符包括空格、换行符和制表符——参见 isspace)。格式字符串中的单个空格验证从流中提取的任意数量的空格字符(包括无)。

于 2013-09-19T19:26:02.103 回答