C语言,输入身份证号,输出性别、出生年月日,同时输出还需要多少天才过生日
时间: 2024-05-31 16:07:15 浏览: 136
#include<stdio.h>
#include<string.h>
#include<time.h>
int main()
{
char id[19]; //定义字符数组存储身份证号
printf("请输入18位身份证号:\n");
scanf("%s",id);
char sex; //定义字符变量存储性别
if(id[16]%2==0) //判断性别
sex='女';
else
sex='男';
printf("性别:%c\n",sex); //输出性别
char year[5],month[3],day[3]; //定义字符数组分别存储年、月、日
strncpy(year,id+6,4); //拷贝年份
year[4]='\0'; //添加字符串结尾符
strncpy(month,id+10,2); //拷贝月份
month[2]='\0'; //添加字符串结尾符
strncpy(day,id+12,2); //拷贝日期
day[2]='\0'; //添加字符串结尾符
printf("出生日期:%s年%s月%s日\n",year,month,day); //输出出生日期
time_t now=time(NULL); //获取当前时间
struct tm *ptm=localtime(&now); //将当前时间转换为struct tm结构体
int now_year=ptm->tm_year+1900; //获取当前年份
int now_month=ptm->tm_mon+1; //获取当前月份
int now_day=ptm->tm_mday; //获取当前日期
int age=now_year-atoi(year); //计算年龄
printf("年龄:%d岁\n",age); //输出年龄
int next_year=now_year; //定义整型变量存储下一次生日的年份
int next_month=atoi(month); //定义整型变量存储下一次生日的月份
int next_day=atoi(day); //定义整型变量存储下一次生日的日期
if(next_month<now_month || (next_month==now_month && next_day<now_day)) //如果今年的生日已经过了
next_year++; //下一次生日的年份加1
struct tm next={0}; //定义struct tm结构体存储下一次生日的时间
next.tm_year=next_year-1900; //设置年份
next.tm_mon=next_month-1; //设置月份
next.tm_mday=next_day; //设置日期
time_t next_time=mktime(&next); //将struct tm结构体转换为time_t类型
int days=(int)((next_time-now)/86400); //计算距离下一次生日还有多少天
printf("距离下一次生日还有%d天\n",days); //输出距离下一次生日还有多少天
return 0;
}
阅读全文