我使用 scanf 来读取输入,stdin因为 scanf 被认为比cin. 我发现了以下意外行为:
for(int i = 0; i<3; i++) {
scanf("%d ", &t);
printf("The input was %d\n", t);
}
Run Code Online (Sandbox Code Playgroud)
该"%d "格式scanf有望读整数,之后忽略空格或换行字符。因此,预期的输出应该是这样的:
0
The input was 0
1
The input was 1
2
The input was 2
Run Code Online (Sandbox Code Playgroud)
但是我得到以下输出:
0
1
The input was 0
2
The input was 1
Run Code Online (Sandbox Code Playgroud)
有人可以帮我理解这里的行为吗?
当您键入1ENTER库代码时,会看到 并将其1与 相匹配"%d"。然后它看到ENTER并开始将其与 匹配" "。由于没有其他东西进入,它等待,等待,等待。
一段时间后,您键入2ENTER。由于scanf()仍在等待空白而2不是空白,因此调用成功终止,将 留2在缓冲区中并打印"The input was 1"。
等等 ...
所以,不要在转换规范的末尾放置空格——或者其他任何地方,因为大多数转换规范已经做了前导空格抑制。
| 归档时间: |
|
| 查看次数: |
60 次 |
| 最近记录: |