我正在通过阅读教科书为编程学校做准备。 有一个我不明白的特殊问题,教科书没有给出答案。
PS:我已经在网上学过一些C ++ / C#,但是从来没有通过正确教授的编程课程,所以我在努力学习一些概念。
问:对于以下每对scanf格式字符串,请指明两个字符串是否相同。 如果不是,请说明如何区分它们。
A)
"%d"
与" %d"
B)"%d-%d-%d"
对"%d -%d -%d"
C)"%f"
与"%f "
D)"%f,%f"
与"%f, %f"
首先,我甚至不明白问题是什么。 教科书的意思是2个字符串是否“等价”?
如果是,有人可以解释这些差异,并可能告诉我如何区分它们吗?
让我们首先尝试A
: "%d"
与" %d"
,它们是scanf()
等效格式字符串。
" "
将执行以下操作。 它永远不会失败。
1)扫描并丢弃(跳过)可选的空白区域。
2)读取非空白空间或文件结束后,如果不是(EOF),则读取的最后一个字符将被放回到stdin
。
"%d"
本身将尝试3件事(它可能会失败)
1)扫描并丢弃(跳过)可选的空白区域。
2)扫描并转换表示十进制整数的数字文本。
3)读取非数字文本或文件结束后,如果不是(EOF),则将最后一个字符读回stdin
。
" %d"
同时执行上述操作。 与"%d"
一起做第二次的结果相同。
使用*scanf()
说明符注意:
除非规范包含
[
,c
或n
说明符,否则将跳过输入的空白字符(由isspace
函数指定)。 C11§7.21.6.28
B
, C
, D
区别?
将鼠标hover在提示1上:
除了上面提到的3之外,
scanf()
说明符之前的" "
是与没有它的等效scanf()格式。
将鼠标hover在提示2上:
只相当于3个中的1个。
将鼠标hover在提示3上:
考虑输入:
“123 -456-789”
“123.456 x”下一个要读的字是什么?
B) "%d-%d-%d"
对"%d -%d -%d"
C) "%f"
与"%f "
D) "%f,%f"
与"%f, %f"
回答:
Awww,你真的想得到答案吗?
来自维基百科
空白:任何空格字符都会触发零个或多个空白字符的扫描。 空白字符的数量和类型不需要在任何一个方向上匹配。
scanf
是关于继续消耗输入并得到你关心的事情。 格式化字符串中的普通char表示它使用完全相同的char,而不执行任何其他操作。 %d
, %f
可以跳过前导空格。 总而言之,我们得到了:
所以答案是B.
以上就是c/c++开发分享不同scanf格式之间的差异相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/560339.html