#include
#include
main()
{
int year,month,day,y1,m1,d1,year3,month3,day3,y2;
printf("请输入您的生日\n");
printf("XXXX,XX,XX\n");
scanf("%d,%d,%d",&y1,&m1,&d1);//用户输入出生日期
/*判断生日格式是否正确 */
{
if(y1>1000){
if(m1 > 0&m1 <13){
if(d1>0&d1<3299){
}
else{
printf("生日格式不正确,请从新填写");
}
}
else{
printf("生日格式不正确,请从新填写");
}
}
else{
printf("生日格式不正确,请从新填写");
}
}
/*读取今天时间 */
{
time_t nowtime;
struct tm *timeinfo;
time( &nowtime );
timeinfo = localtime( &nowtime );
int year, month, day;
year = timeinfo->tm_year + 1900;
month = timeinfo->tm_mon + 1;
day = timeinfo->tm_mday;
printf("%d %d %d\n", year, month, day);
}
/*进行两个日期差值运算*/
{
/*天数比较*/
if(day>d1){
day3 = day -d1; //天数大于出生日期
printf("%d",day3);
}
else{
day3 = (d1 - day);//天数小于出生日期
printf("%d",day3);
}
}
你的题目要求是什么 代码看着头大
不急着算天数,我们先看看
1.生日和当前日期是否在同一个月。
a. 如果是在同一个月,再看看当前日期是否大于生日日期。
如果大那么说明生日已经过完了,计算应该是现在到明年生日的天数,天数 = 当前月剩余天数 + 下一个月到生日前一个月正月天数的累计天数 + 生日日期;
如果小于才是用生日减去当前日期得到天数. 天数 = 生日日期 - 当前日期。
b. 如果不在同一个月,且当前月份大于生日月,那么说明生日已经过了,计算应该是现在到明年生日的天数。天数 = 当前月剩余天数 + 下一个月到生日前一个月正月天数的累计天数 + 生日日期;
c. 如果不在同一个月,且当前月份小于生日月,那么生日还没到。天数 = 当前月剩余天数 + 下一个月到生日前一个月正月天数的累计天数 + 生日日期;
另外由于闰年的2月是29天,计算多个月天数的时候要注意这一点。
//计算生日剩余天数
int CountDays()
{
int year,month,day,y1,m1,d1,day3;
int year1[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};//当年
int year2[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};//下年
time_t nowtime;
struct tm *timeinfo;
while(1)
{
printf("请输入您的生日\n");
printf("XXXX,XX,XX\n");
scanf("%d,%d,%d",&y1,&m1,&d1);//用户输入出生日期
/*判断生日格式是否正确 */
if(y1 > 1000)
{
if((m1 > 0) && (m1 < 13))
{
if((d1 > 0) && (d1<32))
{
break;
}
else
{
printf("生日格式不正确,请从新填写");
}
}
else
{
printf("生日格式不正确,请从新填写");
}
}
else
{
printf("生日格式不正确,请从新填写");
}
system("cls");
}
/*读取今天时间 */
time( &nowtime );
timeinfo = localtime( &nowtime );
year = timeinfo->tm_year + 1900;
month = timeinfo->tm_mon + 1;
day = timeinfo->tm_mday;
printf("%d %d %d\n", year, month, day);
//是闰年就将2月份设置为29天
if(((year%4 == 0)&&(year%100 != 0)) || (year%400 == 0))
{
year1[2] = 29;
}
else if((((year + 1) % 4 == 0)&&((year + 1) % 100 != 0)) || ((year + 1) % 400 == 0))
{
year2[2] = 29;
}
/*进行两个日期差值运算*/
/*天数计算*/
day3 = 0;
if((month < m1) || ((m1 == month) && (day < d1)))
{//生日没到
while(month < m1)
{
day3 = day3 + year1[month];
month++;
}
day3 = day3 + d1 - day;
}
else
{//生日过了
while(month < 13)
{//当年整月天数
day3 = day3 + year1[month];
month++;
}
month = 1;
while(month < m1)
{//来年整月天数
day3 = day3 + year2[month];
month++;
}
day3 = day3 + d1 - day;
}
return day3;
}
这是代码 你参考参考