首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >scanf格式字符串中不同位置的空格有什么影响?

scanf格式字符串中不同位置的空格有什么影响?
EN

Stack Overflow用户
提问于 2018-08-24 05:36:20
回答 2查看 473关注 0票数 0

请确认,添加,更正,视情况而定-

代码语言:javascript
运行
复制
scanf (" %c %d %s", &a, &b, c);

在上面- %c前的第一个空格确保在scanf开始接受来自stdin的新字符串进入缓冲区之前清除缓冲区,以用于此特定函数scanf调用。

%d和%s前的剩余两个空格允许任意数量的空格或制表符,但不能在用户分别输入a、b和b、c之间输入按键。

即使使用上述方法,输入中也不能包含空格,即空格是三个输入中每一个的分隔符。要添加空格,必须在字符串控制大括号[]中指定,如"%a-z A-Z_ 0-9“可以包含任何大写或小写字母、数字0-9、空格和下划线-但会将所有其他字符视为无效-无效字符将转到格式字符串中的下一个输入,因此如果上面的%___后面跟着%c并按下星号,则星号将被放入与%c对应的字符中。

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2018-08-24 05:43:27

来自cppreference.com

格式字符串中的任何单个空格字符都会使用输入中所有可用的连续空格字符

因此,格式字符串中的所有空格都表示跳过输入中的任何空格。

%c之前的空格和其他空格没有区别。初始空格不会清除缓冲区,它只是跳过输入中的任何初始空格。这确保%c将读取输入中的第一个非空格字符。

空白包括空格、制表符和换行符。因此,您可以在每个输入之间放置空格或按enter键。

实际上,您不需要在%d%s之前使用空格。这些格式不会读取任何包含空格的内容,它们会自动跳过读取对象之前的任何空格。格式化字符串中的空格是多余的,不会有什么坏处,而且可以使其更易于阅读。

在尝试解析输入之前,除[cn之外的所有转换说明符都会使用并丢弃所有前导空格字符(通过调用isspace来确定)。

..。

通过在格式字符串中使用空格字符,可以使不使用前导空格的转换说明符(如%c )使用前导空格

票数 1
EN

Stack Overflow用户

发布于 2018-08-24 05:50:36

%c之前的第一个空格确保在scanf开始接受来自标准输入的新字符串进入缓冲区之前清除缓冲区,以用于此特定函数scanf调用。这将从之前的任何输入函数调用中清除任何分隔符。

不是的。缓冲区未被清除,并且没有分隔符。

%d和%s之前的剩余两个空格允许任意数量的空格或制表符,但不能在用户分别输入a、b和b、c之间输入按键。

不是的。按Enter键将生成一个换行符,即空格。

即便如此,所有输入都不能包含空格,即空格是三个输入中每一个的分隔符。

不是的。

无效字符将转到格式字符串中的下一个输入

是。这并不局限于%[ ]:例如,如果%d在输入流中看到12foo,它将消耗12,并将foo留给格式字符串的其余部分读取(但是,如果根本没有前导数字,%d将失败并中止处理)。

此时,格式字符串中的任何空白字符都会读取和使用输入流中的所有可用空白字符,包括空格、制表符和换行符。空格出现在%c%d%s之前并不重要:输入中的所有空格(包括换行符)都会被跳过。

%c可以接受空格。空格不是分隔符,因为%c没有分隔符;它总是读取单个字符。它不能读取您代码中的空格的唯一原因是在格式字符串中它的前面是,这将跳过所有可用的空格。

至于%d%s,它们隐式地跳过了前导空格。也就是说," %d"等同于"%d"" %s"等同于"%s"

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

https://stackoverflow.com/questions/51994597

复制
相关文章

相似问题

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