7-27 从身份证号码中提取出出生年月 (12point(s))
输入一个18位的身份证号码,提取出年份和月份并输出,请判断输入的号码是否是18位,如果不是请提示"Invalid data,input again!",并重新输入新的号码。
输入格式:
输入一个18位的身份证号码。
输出格式:
在一行中输出出生年和月份,中间用逗号分隔,最后换行。
输入样例1:
370303200008161771
输出样例1:
2000,08
输入样例2:
37030320012311771
370303200712311771
输出样例2:
Invalid data,input again!
2007,12
#include<stdio.h>
#include<ctype.h>
#include<string.h>
#define LENGTH 19
//#define debug
int main()
{
char id[LENGTH];
Enter:
scanf("%s",id);
int len = strlen(id);
int flag = 1;//判断是否和法的标志
if(len != 18)
flag = 0;
//不知道为什么,带着下面这些,不能过
/*else
{
for(int i = 0; i < len; i++)
{
if(!isdigit(id[i]))
{
flag = 0;
break;
}
}
}
*/
if(flag == 0)
{
printf("Invalid data,input again!\n");
goto Enter;
}
else
{
/*
因为题目中,月份有的有0的输出,这里暂时不将他存储到一个变量中
int year,month;
*/
// 第七位开始,4 位数为年,7-1+4 = 10.
// 第11位开始,2 位数为月 11-1+2 = 12;
for(int i = 7 -1; i < 10; i++)
printf("%c",id[i]);
printf(",");
for(int i = 11-1; i < 12; i++)
printf("%c",id[i]);
printf("\n");
}
return 0;
}