题解 | #出生日期输入输出#

出生日期输入输出

http://www.nowcoder.com/practice/4a4a9dd1edb6453ba4a0432319200743

先说一下我用的是c语言
因为题目要求输入一串数字,为了存放数字我需要建立变量,打印的时候这数字打印到三个地方,所以我建三个变量
这里备注:通过scanf函数的%m格式控制可以指定输入域宽,输入数据域宽(列数),按此宽度截取所需数据。
scanf("%4d%2d%2d",&i,&j,&c);
第一个四个数字,第二 三都是两个数字,所以是%4和%2%2
输入完成我把他们放到i j c的地址
现在可能你觉得直接打印就完了,其实不是
打印的时候你会发现如果他输入的是20130225
你前面打印2013的时候没问题
但打印02的时候它会自己把前面那个0省去,就打印2,这显然不满足题意。
于是后面又说通过printf函数的%0格式控制符,输出数值时指定左面不使用的空位置自动填0。
这时你就应该意识到你需要这打印的时候做点什么
printf("month=%02d\n",j);
我在%d中加了一个02来打印这个0,你可能会想为什么是02,一个0就01嘛,不是这样的,你打01会跟没有加一样。
我代码写完后:
#include<stdio.h>
int main()
{
int i = 0;
int j = 0;
int c = 0;
scanf("%4d%2d%2d",&i,&j,&c);
printf("year=%d\n",i);
printf("month=%02d\n",j);
printf("date=%02d",c);
return 0;
}

肯定有更好的解法,但目前的我只能写成这样,谢谢观看。

全部评论
逛了一圈就你讲的最清楚
2 回复 分享
发布于 2022-10-14 20:21 北京
为什么只打一个0或只打个01就跟没加一样?
1 回复 分享
发布于 2023-04-09 23:04 河南
2应该是打印两位的意思吧
1 回复 分享
发布于 2023-08-15 15:26 河南
说的太好了
1 回复 分享
发布于 03-19 11:46 广东
思路清楚,讲的又细又明白,口语化,就需要你这种的思路,我只能说NB!老哥稳
1 回复 分享
发布于 昨天 12:33 河北
为什么打01就跟没加一样?
点赞 回复 分享
发布于 2022-10-14 20:25 北京
#include <stdio.h> int main() { int a,b,c,d; scanf("%d",&a); b=a/10000; c=(a-b*10000)/100; d=(a-b*10000)-c*100; printf("year=%d\n",b); if(c<10) { printf("month=0%d\n",c); } else { printf("month=%d\n",c); } if(d<10) { printf("date=0%d\n",d); } else { printf("date=%d\n",d); } return 0; }</stdio.h>
点赞 回复 分享
发布于 2023-12-12 13:01 重庆
要考虑兼容性 不一定都是20130225的年份
点赞 回复 分享
发布于 2023-12-12 13:01 重庆

相关推荐

头像
11-21 11:39
四川大学 Java
是红鸢啊:忘了还没结束,还有字节的5k 违约金
点赞 评论 收藏
分享
不讲武德的黑眼圈很能干:接好运
点赞 评论 收藏
分享
评论
87
3
分享
牛客网
牛客企业服务