郑州轻工业大学oj题解(c语言)1087:|郑州轻工业大学oj题解(c语言)1087: 获取出生日期(多实例测试)

还记得之前有一期曾经提到过%d的种种用法。如果没记错应该是1012题,有介绍过%d保留小数的用法。
恰好今天要写的这道题就与%d的其他用法有关,就顺带把我以前积累过的一些用法一起介绍了吧。
1087: 获取出生日期

  • 题目描述
    输入某人的18位身份证号,输出其出生日期。
  • 输入
    多实例测试。首先输入一个整数n,表示测试实例的个数,然后是n行,每行是一个18位身份证号。
  • 输出
    对于输入的每个身份证号,输出一行,即其对应的出生日期,输出格式为:yyyy-mm-dd。
  • 参考代码:
#include 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整串输出
【郑州轻工业大学oj题解(c语言)1087:|郑州轻工业大学oj题解(c语言)1087: 获取出生日期(多实例测试)】以上为去年学习时记下的笔记,仅作分享学习之用,就不排版介绍了。

    推荐阅读