鱼C论坛

 找回密码
 立即注册
查看: 3173|回复: 9

带你学c带你飞S1E17第1动动手

[复制链接]
发表于 2022-5-7 18:52:35 | 显示全部楼层 |阅读模式
15鱼币
可以运行,但不知道为啥打不了今年的日期,有大佬告诉我这个程序的漏洞吗?题目 是求从出生到现在一共活了多少天
如果有【】被吞了是帖子问题,我有输入的
#include<stdio.h>

int main()
{
        int days[3],year[3];
        int count,a,i,b;
        int c=0,q=0;
        int mon[]={31,28,31,30,31,30,31,31,30,31,30,31};
        int d=0,sum=0,f;
        printf("请输入你的生日(如1988-05-20): ");
        scanf("%d",&days[3]);
       
        printf("请输入今年日期(2016-03-28): ");
        scanf("%d",&year[3]);
       
       
        for(a=days[0]+1;a<year[0];) //算出相隔的年的数量
        {
                d++;
                a++;
                if(a%400==0||(a%4==0&&a%100!=0))//判断是否为闰年
                {
                        i++;
                }
                else
                {
                        count=(d-i)*365+i*366;
                }
        }
       
        if(year[0]%400==0||(year[0]%4==0&&year[0]%100!=0))//判断今年那年是否是闰年
        {
                if(year[1]>2)//判断月份是否大于2月份
                {
                        mon[1]=29;
                        for(b=0;b<year[1]-1;b++)
                        {
                                c=mon[b]+c;//计算月份的天数
                        }
                       
                }
                else if(year[1]=2)
                {
                        c=31;
                }
                else
                {
                        c=0;
                }
        }
        else
        {
                for(b=0;b<year[1]-1;b++)
                {
                        c=mon[b]+c;
                }
        }
       
        if(days[0]%400==0||(days[0]%4==0&&days[0]%100!=0))//判断生日的年份是否为闰年
        {
                if(days[1]=1)
                {
                        mon[1]=29;
                        for(b=1;b<12&&b>0;b++)
                        {
                                q=q+mon[b];
                        }
                }
                else
                {
                        for(b=2;b<12&&b>=days[1];b++)
                        {
                                q=q+mon[b];
                        }
                }
               
                f=mon[b]-days[2];//用月份数减去生日的当天
        }
        else
        {
                for(b=days[1];b<12&&b>=days[1];)
                {
                        q=q+mon[b];
                       
                }
               
                f=mon[b]-days[2];
        }
       
       
        sum=count+c+q+year[2]+f;
        printf("你在这个世界上总共生存了%d天\n",sum);
       
        return 0;
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-7 18:58:06 | 显示全部楼层
只给最后一个元素赋值有啥用,何况最后一个元素的下标也应该是2才对
 scanf("%d",&days[3]);
 scanf("%d",&year[3]);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-7 22:29:04 | 显示全部楼层
#include<stdio.h>

int main()
{
        int days[3],year[3];
        int count,a,i,b;
        int c=0,q=0;
        int mon[]={31,28,31,30,31,30,31,31,30,31,30,31};
        int d=0,sum=0,f;
        printf("请输入你的生日(如1988-05-20): ");
        scanf("%d-%d-%d",&days[0],&days[1],&days[2]);
      
        printf("请输入今年日期(2016-03-28): ");
        scanf("%d-%d-%d",&year[0],&year[1],&year[2]);
      
      
        for(a=days[0]+1;a<year[0];) //算出相隔的年的数量
        {
                d++;
                a++;
                if(a%400==0||(a%4==0&&a%100!=0))//判断是否为闰年
                {
                        i++;
                }
                else
                {
                        count=(d-i)*365+i*366;
                }
        }
      
        if(year[0]%400==0||(year[0]%4==0&&year[0]%100!=0))//判断今年那年是否是闰年
        {
                if(year[1]>2)//判断月份是否大于2月份
                {
                        mon[1]=29;
                        for(b=0;b<year[1]-1;b++)
                        {
                                c=mon[b]+c;//计算月份的天数
                        }
                       
                }
                else if(year[1]=2)
                {
                        c=31;
                }
                else
                {
                        c=0;
                }
        }
        else
        {
                for(b=0;b<year[1]-1;b++)
                {
                        c=mon[b]+c;
                }
        }
      
        if(days[0]%400==0||(days[0]%4==0&&days[0]%100!=0))//判断生日的年份是否为闰年
        {
                if(days[1]=1)
                {
                        mon[1]=29;
                        for(b=1;b<12&&b>0;b++)
                        {
                                q=q+mon[b];
                        }
                }
                else
                {
                        for(b=2;b<12&&b>=days[1];b++)
                        {
                                q=q+mon[b];
                        }
                }
               
                f=mon[b]-days[2];//用月份数减去生日的当天
        }
        else
        {
                for(b=days[1];b<12&&b>=days[1];)
                {
                        q=q+mon[b];
                       
                }
               
                f=mon[b]-days[2];
        }
      
      
        sum=count+c+q+year[2]+f;
        printf("你在这个世界上总共生存了%d天\n",sum);
      
        return 0;
}

注意 数组是从下标0(&days[0], &year[0])开始访问的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-5-8 14:19:34 | 显示全部楼层

好的,谢谢,我知道了哪里错了,我去运行一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-5-8 14:24:00 | 显示全部楼层

emm改了也运行不了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-5-8 14:25:27 | 显示全部楼层
风车呼呼呼 发表于 2022-5-7 18:58
只给最后一个元素赋值有啥用,何况最后一个元素的下标也应该是2才对

改了也不行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-8 15:39:59 | 显示全部楼层

怎么改的?输入是什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-8 19:27:30 From FishC Mobile | 显示全部楼层
你怎么输入的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-5-8 19:29:28 From FishC Mobile | 显示全部楼层
不知君 发表于 2022-5-8 14:24
emm改了也运行不了

我在手机上都能运行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-5-9 10:17:17 | 显示全部楼层
3120781247 发表于 2022-5-8 19:29
我在手机上都能运行

就是把scanf("%d-%d-%d",&year[0],&year[1],&year[2]);这些都加回去啊,其他都一样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 18:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表