C primer Plus - 3.4 74页 scanf读取字符串

"这篇博客详细介绍了scanf函数在处理输入时的行为。scanf在遇到第一个空白字符时停止读取字符串,只读取第一个单词。对于%d%s的组合,输入数据需要用逗号隔开。使用scanf("%d ")会导致程序在读取到换行符后阻塞,等待更多输入。理解这些特性有助于避免输入处理中的常见问题。"
摘要由CSDN通过智能技术生成

scanf(“%s”,…)在读取字符串遇到第一个空白(空格,制表符,换行符)时该字符被当成NULL处理,就不再读取输入
根据%s转换说明,scanf()只会读取字符串中的第一个单词,而不是整句。

scanf(%d%s,…)(正确)
在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔,则可用空格,TAB或回车作间隔。C编译在碰到空格,TAB,回车或非法数据(如对“%d”输入“12A”时,A即为非法数据)时即认为该数据结束。

scanf(%d,%s,…)(不推荐)
如果要用scanf(%d,%s,…),输入的数据也要用,隔开,因为用scanf()读取数据时,输入的格式必须和scanf()的格式控制字符串对应。

scanf函数中没有类似printf的精度控制。
如: scanf("%5.2f",&a); 是非法的。不能企图用此语句输入小数为2位的实数

在输入字符数据(%c)时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。

scanf函数返回成功读入的数据项数,读入数据时遇到了“文件结束”则返回EOF。

scanf("%d\n"…)(非常不推荐)
写个程序,用scanf()读数据,只要不是%c就行。然后输入的时候,随便输入回车、空格、制表符,然后“回车”确认。会发现程序依然提示等待你输入。根据scanf会跳过输入值(%c除外)前面的空白的特性,它忽略掉所有前导空白符之后发现缓冲区是空的!于是乖乖地阻塞住,等待你输入。
如果像上述这样写,按下回车后C会帮你忽略’\n’,此时scanf读取缓冲区发现为空,以为你还没输入完,则阻塞住等待你输入的第一个有效数据
所以按一万个回车也不会重新开始读取输入,直到你输入第一个有效数字(例如‘5’)

scanf("%c",…)
从第一个输入字符开始读取
scanf(" %c",…)
从第一个非空白字符开始读取

参考资料:
https://blog.csdn.net/ll_dream/article/details/80253189?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link

https://blog.csdn.net/qq_37548017/article/details/108804175?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163142184816780366571118%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=163142184816780366571118&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_v29_ecpm-15-108804175.pc_search_insert_download&utm_term=scanf+%5Cn&spm=1018.2226.3001.4187

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值