lwhnx 发表于 2017-12-7 17:03:42

C新手遇见一个很奇怪的问题

本帖最后由 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 = (year1 % 400 == 0 || (year1 % 4 == 0 && year1 % 100 != 0)) ? 29 : 28;
                for (month1; month1 <= 12; month1++)
                {
                        for (day1; day1 <= days; day1++)
                        {
                                if (year1 == year2 && month1 == month2 && day1 == day2)
                                {
                                        goto FINISH;
                                }
                                count++;
                        }
                        day1 = 0;
                }
                month1 = 0;
        }

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


        getchar();
}

就那个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 = (year1 % 400 == 0 || (year1 % 4 == 0 && year1 % 100 != 0)) ? 29 : 28;
                for (month1; month1 <= 12; month1++)
                {
                        for (day1; day1 <= days; day1++)
                        {
                                if (year1 == year2 && month1 == month2 && day1 == day2)
                                {
                                        goto FINISH;
                                }
                                count++;
                        }
                        day1 = 0;
                }
                month1 = 0;
        }

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

        return 0;
}

lwhnx 发表于 2017-12-7 17:08:49

@qq1242009750 @燃烧的水

qq1242009750 发表于 2017-12-7 20:09:17

                                    估计是算法的问题,给你写了一个算法,输入方式还是你的那个输入方式

                //年的循环
                for (; year1 <= year2; year1++)
                {
                        //判断是否是闰年
                        days = (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;
                                        }
                                }
                        }
                        //没到目标年的操作
                        else
                        {
                                for (; month1 <= 12; month1++)
                                {
                                        //计算当前月的天数
                                        count += days - day1;        //一开始不是一个完整的月所以要减去过去的天数:例如 5月2号,那么五月就剩下了 31-2=29天
                                        day1 = 0;                //清除过去的天数
                                }
                        }
                        month1 = 1;                //设置回到1月
                }


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

lwhnx 发表于 2017-12-7 21:46:18

qq1242009750 发表于 2017-12-7 20:09
估计是算法的问题,给你写了一个算法,输入方式还是你的那个输入方式
...

谢谢,我贴的代码,只是那个INT那里不同, 结果有个正确 有个不正确,不知道为什么

qq1242009750 发表于 2017-12-7 22:34:46

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

不会啊,一样的,只不过是变量分开定义了。
页: [1]
查看完整版本: C新手遇见一个很奇怪的问题