l964772215
l964772215
采纳率100%
2015-12-23 03:55

这个C语言代码可以编译成功,但是天数结果不正确

已采纳

#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);

    } 

}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

4条回答

  • chaobo_lu 零度永恒 6年前

    你的题目要求是什么 代码看着头大

    点赞 评论 复制链接分享
  • chaobo_lu 零度永恒 6年前
     //计算生日剩余天数
    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;
    }
    

    这是代码 你参考参考

    点赞 评论 复制链接分享
  • chaobo_lu 零度永恒 6年前

    不急着算天数,我们先看看
    1.生日和当前日期是否在同一个月。
    a. 如果是在同一个月,再看看当前日期是否大于生日日期。
    如果大那么说明生日已经过完了,计算应该是现在到明年生日的天数,天数 = 当前月剩余天数 + 下一个月到生日前一个月正月天数的累计天数 + 生日日期;
    如果小于才是用生日减去当前日期得到天数. 天数 = 生日日期 - 当前日期。
    b. 如果不在同一个月,且当前月份大于生日月,那么说明生日已经过了,计算应该是现在到明年生日的天数。天数 = 当前月剩余天数 + 下一个月到生日前一个月正月天数的累计天数 + 生日日期;
    c. 如果不在同一个月,且当前月份小于生日月,那么生日还没到。天数 = 当前月剩余天数 + 下一个月到生日前一个月正月天数的累计天数 + 生日日期;
    另外由于闰年的2月是29天,计算多个月天数的时候要注意这一点。

    点赞 评论 复制链接分享
  • xianfajushi 智者知已应修善业 6年前

相关推荐