鱼C论坛

 找回密码
 立即注册
查看: 1983|回复: 4

[已解决]C新手遇见一个很奇怪的问题

[复制链接]
发表于 2017-12-7 17:03:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 lwhnx 于 2017-12-7 17:05 编辑
#include <stdio.h>

int main()
{
        int days[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
        int year1, month1, day1, year2, month2, day2;
        long count = 0;

        printf("请输入你的生日(如1988-05-20):");
        scanf("%d-%d-%d", &year1, &month1, &day1);

        printf("请输入今年日期(如2016-03-28):");
        scanf("%d-%d-%d", &year2, &month2, &day2);

        for (year1; year1 <= year2; year1++)
        {
                days[1] = (year1 % 400 == 0 || (year1 % 4 == 0 && year1 % 100 != 0)) ? 29 : 28;
                for (month1; month1 <= 12; month1++)
                {
                        for (day1; day1 <= days[month1 - 1]; day1++)
                        {
                                if (year1 == year2 && month1 == month2 && day1 == day2)
                                {
                                        goto FINISH;
                                }
                                count++;
                        }
                        day1 = 0;
                }
                month1 = 0;
        }

FINISH: printf("你在这个世界上总共生存了%d天\n", count);


        getchar();
}
1.jpg
就那个INT那里不同 这样 结果就是错的。 如果分开INT 如下 就是正确的 不知道为什么!!!!!

#include <stdio.h>

int main()
{
        long count = 0; 
        int year1, year2; 
        int month1, month2;
        int day1, day2;
        int days[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

        printf("请输入你的生日(如1988-05-20):");
        scanf("%d-%d-%d", &year1, &month1, &day1);

        printf("请输入今年日期(如2016-03-28):");
        scanf("%d-%d-%d", &year2, &month2, &day2);

        for (year1; year1 <= year2; year1++)
        {
                days[1] = (year1 % 400 == 0 || (year1 % 4 == 0 && year1 % 100 != 0)) ? 29 : 28;
                for (month1; month1 <= 12; month1++)
                {
                        for (day1; day1 <= days[month1 - 1]; day1++)
                        {
                                if (year1 == year2 && month1 == month2 && day1 == day2)
                                {
                                        goto FINISH;
                                }
                                count++;
                        }
                        day1 = 0;
                }
                month1 = 0;
        }

FINISH: printf("你在这个世界上总共生存了%d天\n", count);

        return 0;
}
2.jpg
最佳答案
2017-12-7 20:09:17
                                    估计是算法的问题,给你写了一个算法,输入方式还是你的那个输入方式
                //年的循环
                for (; year1 <= year2; year1++)
                {
                        //判断是否是闰年
                        days[1] = (year1 % 400 == 0) || (year1 % 4 == 0 && year1 % 100 != 0) ? 29 : 28;

                        //到了目标年的操作
                        if (year1 == year2)
                        {                //从一月份循环到目标的月份
                                for (; month1 <= month2; month1++)
                                {        
                                        //判断是否在目标月份
                                        if (year1 == year2 && month1 == month2)
                                        {        
                                                //加上结束的天数  例如:  5月份10号结束,那么五月就只有10天
                                                count += day2;
                                        }
                                        else   //不在目标月份
                                        {
                                                //不在目标月表示,一个月都是满的
                                                count += days[month1 - 1];
                                        }
                                }
                        }
                        //没到目标年的操作
                        else
                        {
                                for (; month1 <= 12; month1++)
                                {
                                        //计算当前月的天数
                                        count += days[month1 - 1] - day1;        //一开始不是一个完整的月所以要减去过去的天数:例如 5月2号,那么五月就剩下了 31-2=29天
                                        day1 = 0;                //清除过去的天数
                                }
                        }
                        month1 = 1;                //设置回到1月
                }


                printf("你在这个世界上总共生存了%d天\n", count);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-12-7 17:08:49 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-7 20:09:17 | 显示全部楼层    本楼为最佳答案   
                                    估计是算法的问题,给你写了一个算法,输入方式还是你的那个输入方式
                //年的循环
                for (; year1 <= year2; year1++)
                {
                        //判断是否是闰年
                        days[1] = (year1 % 400 == 0) || (year1 % 4 == 0 && year1 % 100 != 0) ? 29 : 28;

                        //到了目标年的操作
                        if (year1 == year2)
                        {                //从一月份循环到目标的月份
                                for (; month1 <= month2; month1++)
                                {        
                                        //判断是否在目标月份
                                        if (year1 == year2 && month1 == month2)
                                        {        
                                                //加上结束的天数  例如:  5月份10号结束,那么五月就只有10天
                                                count += day2;
                                        }
                                        else   //不在目标月份
                                        {
                                                //不在目标月表示,一个月都是满的
                                                count += days[month1 - 1];
                                        }
                                }
                        }
                        //没到目标年的操作
                        else
                        {
                                for (; month1 <= 12; month1++)
                                {
                                        //计算当前月的天数
                                        count += days[month1 - 1] - day1;        //一开始不是一个完整的月所以要减去过去的天数:例如 5月2号,那么五月就剩下了 31-2=29天
                                        day1 = 0;                //清除过去的天数
                                }
                        }
                        month1 = 1;                //设置回到1月
                }


                printf("你在这个世界上总共生存了%d天\n", count);
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-7 21:46:18 | 显示全部楼层
qq1242009750 发表于 2017-12-7 20:09
估计是算法的问题,给你写了一个算法,输入方式还是你的那个输入方式
...

谢谢,我贴的代码,只是那个INT那里不同, 结果有个正确 有个不正确,不知道为什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-7 22:34:46 | 显示全部楼层
lwhnx 发表于 2017-12-7 21:46
谢谢,我贴的代码,只是那个INT那里不同, 结果有个正确 有个不正确,不知道为什么

不会啊,一样的,只不过是变量分开定义了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-1 03:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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