首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WhiteSpace字符的扫描格式问题

WhiteSpace字符的扫描格式问题
EN

Stack Overflow用户
提问于 2014-04-15 09:55:18
回答 2查看 62关注 0票数 2

我使用scanf从stdin读取输入,因为scanf被认为比cin快得多。我发现了以下意想不到的行为:

代码语言:javascript
复制
for(int i = 0; i<3; i++) {
    scanf("%d ", &t);
    printf("The input was %d\n", t);
}

预计"%d "格式的scanf将读取整数,并忽略后面的空格或新行字符。因此,预期的输出应该如下所示:

代码语言:javascript
复制
0
The input was 0
1
The input was 1
2
The input was 2

然而,我得到了折叠输出:

代码语言:javascript
复制
0
1
The input was 0
2
The input was 1

有人能帮我理解一下这里的行为吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-15 09:59:25

当您键入1ENTER时,库代码将看到1并将其与"%d"匹配。然后,它将看到ENTER并开始将其与" "匹配。当没有其他东西进来时,它就在等待,等待,等待。

过一段时间,您可以输入2ENTER。由于scanf()仍然在等待空白,而2不是空白,所以调用成功地终止,将2留在缓冲区中并打印"The input was 1"

等等..。

所以,不要将空格放在转换规范的末尾--或者其他地方,因为大多数转换规范已经完成了空格抑制。

票数 5
EN

Stack Overflow用户

发布于 2014-04-15 09:57:22

把空间放在%d前面。或者,更好的是,移除它!

此外,在依赖具有有效值的scanf()之前,请检查t的返回值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23080324

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档