• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++中scanf、printf的特殊用法(持续更新)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

最近做到类似于日期的题目,通常可以想用字符串接收,然后再累加算出年月日。

但是最近学到一些小技巧,所以想来总结一下。

当然,通俗的scanf、printf是用来干什么的我就不再介绍了,百度搜一下有很多比我讲得清楚的。

 

赋值抑制字符*

 

比如现在有一个需求,给你一个身份证号,你来算算他今年多少岁了。你可能想着把年份算出来。

scanf里边也可以用通配符,比如下面代码中的scanf," %*6d " 。星号可以理解为赋值抑制字符,他表示从缓冲区中取6个字符,但是不赋值(也就是说不用写参数来接收他)。

 

int main(){
    int yy,mm,dd;

    scanf("%*6d%4d%2d%2d%*4d",&yy,&mm,&dd);

    printf("%d %d %d\n",yy,mm,dd);

    return 0;
}

 

再比如,给你一个数,去掉第一位数字,输出后面的n-1位数(且忽略前缀0)。

用赋值抑制字符来做非常简单。三行代码搞定。

直接看scanf,从缓冲区中取出第一个位,但是不赋值,然后剩下的n-1位若前缀有0,那么 %d 会自动去掉前缀0。

int w;
scanf("%*1d%d",&w);
printf("%d\n",w);

 

scanf("%[^\n]%*c",str);

常常会遇到输入有空格的字符串,

这段代码就可以很简单的解决这些问题。

^表示”非”,即读入其后面的字符就结束读入。而后面的%*c则是吸收最后的空格\n。

特别好用,谁用谁知道。

    char a[10000];
    scanf("%[^\n]%*c",a);
    printf("%s\n",a);

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
oracle12c警告日志位置发布时间:2022-07-13
下一篇:
C#中如何只保留小数点后面两位?发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap