对我之前未结的scanf进行补充

不好意思的平头哥 2020-02-21 04:36:02
scanf函数允许把普通字符放在格式字符串中,而且除了%c所有转换说明都会自动跳过待输入项前面的所有空白,所有空白包括没有空格的特殊情况,那么如果在输入字符串中插入空白(如scanf("%d ", &a);或scanf("%d\n", &a););格式字符串中的空白意味着跳过下一个输入项前的所有空白,所以我是否能理解成这样的操作将会导致scanf忽略第一个输入项和第二个输入项前的所有空白,读取第二个输入项,就如scanf("%*d %d",&a);一样.。
我觉得\n不是普通字符,有两个原因
一是scanf函数中的格式字符串对于普通字符要求原样输入,但是例如scanf("%d\n%d", &a, &b);你不输入\n却可以正确读取整数,而加上\n会导致b的读取不正确。
二是因为在c语言中类似于\n会被定义为转义序列而非普通字符,之所以被定义为转义序列,是因为它无法被打印并且具有普通字符所不能体现的功能。
我再补充一下,来解释一下,为什么你会认为它是普通字符而非转义序列,是因为scanf("%d\n",&a);可以正确读取,但是如果你只输入‘\'而不输入'n',scanf一样可以读取,是因为转义序列\n是回车的意思,换行相当于空格,只不过是很多空格,而空格会跳过下一个输入项前的所有空白,所以当你只输第一个输入项,会导致scanf无法正常读取,原因是第一个输入项后都是空白,它不知道在哪停止,所以当你键入第二个输入项,无论是'\'或者是'\n'类似的字符, 都将会导致scanf明白在哪停止读取,
如果第二个输入项是整数,那么它也明白该在这停止,然后将第二个输入项放回输入,等待第二次读取。
...全文
13 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
源代码大师 2021-05-06
  • 打赏
  • 举报
回复
希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10581430.html 希望对你有帮助:https://blog.csdn.net/it_xiangqiang/category_10768339.html

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧