以下代码在C中是什么意思
scanf("%d%#d%d",&a,&b,&c);
如果给定值1 2 3
,则输出为1 0 0
PS-我知道它与printf()
声明一起使用,但是在scanf()
声明中它提供了随机行为。
TL; DR; -在函数的格式字符串中签名#
后的A是错误的代码。%
scanf()
解释:
这#
是一个标志字符,允许在fprintf()
和家庭中使用,而不允许在fscanf()
和家庭中使用。
对于您的代码,#
after的存在%
被视为无效的转换说明符。根据7.21.6.2,
如果转换规范无效,则行为未定义
因此,您的代码会产生未定义的行为。
提示:您可以检查的return
值scanf()
以检查成功“扫描”了多少个元素。
但是,#
与%d
in一起使用的FWIWprintf()
也是未定义的行为。
仅供参考:根据C11
标准文件§7.21.6.1章,标记字符部分,(强调我的)
#
结果将转换为“替代形式”。对于
o
转换,当且仅在必要时,它会提高精度,以强制结果的第一位为零(如果值和精度均为0
,0
则打印一个)。对于x
(或X
)转换,非零结果以0x
(或0X
)为前缀。对于a
,A
,e
,E
,f
,F
,g
,和G
转换,总是转换浮点数的结果包含小数点字符,即使没有数字跟随它。(通常情况下,小数点字符出现在这些转化的结果只有当一个数字如下它。)对于g
和G
转换,尾随零不会从结果中删除。对于其他转换,行为是不确定的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句