scanf 家族%*的妙用


最近写程序用到sscanf,发现自己以前对%*这个格式根本没有理解,可见只看书而不进行实际的操作是不能够对问题进行深入的理解。

先看个例子,假设我们输入:

[html]  view plain copy
  1. the hour is 10,the minute is 30  
而我们只想读取两个数字,通常我们可以分多次读,但是这样比较费事,这时候%*便有用武之地了。

[html]  view plain copy
  1. scanf("%*[^0-9]%d%*[^0-9]%d",&h,&m);  
*表示跳过[^0-9]所表示的字段,而[^0-9]表示所有的非数字的输入,这样就能够只读取数字了。但是这样有个问题是,如果开始输入的便是数字的话,读取便会失败。这个特性其实是scanf家族的规定:scanf会扫描完其格式串,或者碰到某些输入无法与格式控制说明匹配的情况时,便会终止。函数的返回值是成功匹配并赋值的输入项的个数。如果到达文件末尾,返回EOF,但是EOF与0是不同的,0表示下一个输入字符与格式串中的第一个格式说明不匹配,EOF表示到底了文件末尾。

还有一个例子是读取字符时,%c会读取空格的,一般这不是我们所期望的,这时我们可以这样:

[html]  view plain copy
  1. scanf("%1s",&c);  
%s表示读取一个字符串,1表示只读取一个字符,这样便实现了读取字符的功能,而且能够跳过空格。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值