还记得之前有一期曾经提到过%d的种种用法。如果没记错应该是1012题,有介绍过%d保留小数的用法。
恰好今天要写的这道题就与%d的其他用法有关,就顺带把我以前积累过的一些用法一起介绍了吧。
1087: 获取出生日期
- 题目描述
输入某人的18位身份证号,输出其出生日期。 - 输入
多实例测试。首先输入一个整数n,表示测试实例的个数,然后是n行,每行是一个18位身份证号。 - 输出
对于输入的每个身份证号,输出一行,即其对应的出生日期,输出格式为:yyyy-mm-dd。 - 参考代码:
#include<stdio.h>
int main()
{
int y,m,a,n;
scanf("%d",&n);
for(int i = 1; i <= n;i++) {
scanf("%*6d%4d%2d%2d%*d",&y,&m,&a);
printf("%d-%02d-%02d\n",y,m,a);
}
}
- 代码解析:
这道题的代码逻辑上没有什么太值得深究的地方。循环上就是1078的写法,如果还不够理解的同学也可以返回去看之前的代码,多抄几遍,加深印象再来看本题。
1.题目的提示行中有写到。scanf()函数中,可用%md指定读取位数。 这里的m就是位数。例如代码里的%4d,指的就是读取4位整数到参数y中,%2d就是读取2位整数到参数m中,以此类推,%2f,%3c,也是读取相应位数的浮点型数和字符型数的作用。
2.在%4d前还有一个%6d,这里表示的是,跳过6位整数读取之后的数。%nd是跳跃读取的用法。和上一条一样,%2f,%3c也是一样的用法。而在读取行的最后有一个%*d,意思为跳过之后的所有数。
下面附上一段保存在电脑快一年的笔记:
scanf()函数中,可用%md指定读取位数,我们可以只读取需要的,其余的不用理会。
如果在 % 后有一个 " * " 号,这是一个附加说明符,表示读取时跳过它指定的列数。
例如: %*6d%4d%2d%2d 表示读入6位整数但不赋值给任何变量。然后再读入4位整数、2位整数,2位整数,
最后结束读取
%06d补足6位
%s整串输出
👆以上为去年学习时记下的笔记,仅作分享学习之用,就不排版介绍了。