QQ登录

只需一步,快速开始

登录 | 立即注册 | 找回密码

主题

帖子

荣誉

VIP至尊会员

Rank: 15Rank: 15Rank: 15

积分
45
查看: 129|回复: 4

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

[复制链接]
最佳答案
0 
累计签到:20 天
连续签到:1 天
lwhnx 发表于 2017-12-7 17:03:42 1294 | 显示全部楼层 |阅读模式

马上注册加入鱼C,享用更多服务吧^_^

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

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

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

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

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

  11.         for (year1; year1 <= year2; year1++)
  12.         {
  13.                 days[1] = (year1 % 400 == 0 || (year1 % 4 == 0 && year1 % 100 != 0)) ? 29 : 28;
  14.                 for (month1; month1 <= 12; month1++)
  15.                 {
  16.                         for (day1; day1 <= days[month1 - 1]; day1++)
  17.                         {
  18.                                 if (year1 == year2 && month1 == month2 && day1 == day2)
  19.                                 {
  20.                                         goto FINISH;
  21.                                 }
  22.                                 count++;
  23.                         }
  24.                         day1 = 0;
  25.                 }
  26.                 month1 = 0;
  27.         }

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


  29.         getchar();
  30. }
复制代码

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


  1. #include <stdio.h>

  2. int main()
  3. {
  4.         long count = 0;
  5.         int year1, year2;
  6.         int month1, month2;
  7.         int day1, day2;
  8.         int days[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

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

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

  13.         for (year1; year1 <= year2; year1++)
  14.         {
  15.                 days[1] = (year1 % 400 == 0 || (year1 % 4 == 0 && year1 % 100 != 0)) ? 29 : 28;
  16.                 for (month1; month1 <= 12; month1++)
  17.                 {
  18.                         for (day1; day1 <= days[month1 - 1]; day1++)
  19.                         {
  20.                                 if (year1 == year2 && month1 == month2 && day1 == day2)
  21.                                 {
  22.                                         goto FINISH;
  23.                                 }
  24.                                 count++;
  25.                         }
  26.                         day1 = 0;
  27.                 }
  28.                 month1 = 0;
  29.         }

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

  31.         return 0;
  32. }
复制代码

2.jpg
最佳答案
2017-12-7 20:09:17
                                    估计是算法的问题,给你写了一个算法,输入方式还是你的那个输入方式

  1.                 //年的循环
  2.                 for (; year1 <= year2; year1++)
  3.                 {
  4.                         //判断是否是闰年
  5.                         days[1] = (year1 % 400 == 0) || (year1 % 4 == 0 && year1 % 100 != 0) ? 29 : 28;

  6.                         //到了目标年的操作
  7.                         if (year1 == year2)
  8.                         {                //从一月份循环到目标的月份
  9.                                 for (; month1 <= month2; month1++)
  10.                                 {       
  11.                                         //判断是否在目标月份
  12.                                         if (year1 == year2 && month1 == month2)
  13.                                         {       
  14.                                                 //加上结束的天数  例如:  5月份10号结束,那么五月就只有10天
  15.                                                 count += day2;
  16.                                         }
  17.                                         else   //不在目标月份
  18.                                         {
  19.                                                 //不在目标月表示,一个月都是满的
  20.                                                 count += days[month1 - 1];
  21.                                         }
  22.                                 }
  23.                         }
  24.                         //没到目标年的操作
  25.                         else
  26.                         {
  27.                                 for (; month1 <= 12; month1++)
  28.                                 {
  29.                                         //计算当前月的天数
  30.                                         count += days[month1 - 1] - day1;        //一开始不是一个完整的月所以要减去过去的天数:例如 5月2号,那么五月就剩下了 31-2=29天
  31.                                         day1 = 0;                //清除过去的天数
  32.                                 }
  33.                         }
  34.                         month1 = 1;                //设置回到1月
  35.                 }


  36.                 printf("你在这个世界上总共生存了%d天\n", count);
复制代码
楼层
跳转到指定楼层
最佳答案
0 
累计签到:20 天
连续签到:1 天
lwhnx  楼主| 发表于 2017-12-7 17:08:49 | 显示全部楼层
最佳答案
10 
累计签到:288 天
连续签到:9 天
qq1242009750 发表于 2017-12-7 20:09:17 | 显示全部楼层    本楼为最佳答案   
                                    估计是算法的问题,给你写了一个算法,输入方式还是你的那个输入方式

  1.                 //年的循环
  2.                 for (; year1 <= year2; year1++)
  3.                 {
  4.                         //判断是否是闰年
  5.                         days[1] = (year1 % 400 == 0) || (year1 % 4 == 0 && year1 % 100 != 0) ? 29 : 28;

  6.                         //到了目标年的操作
  7.                         if (year1 == year2)
  8.                         {                //从一月份循环到目标的月份
  9.                                 for (; month1 <= month2; month1++)
  10.                                 {       
  11.                                         //判断是否在目标月份
  12.                                         if (year1 == year2 && month1 == month2)
  13.                                         {       
  14.                                                 //加上结束的天数  例如:  5月份10号结束,那么五月就只有10天
  15.                                                 count += day2;
  16.                                         }
  17.                                         else   //不在目标月份
  18.                                         {
  19.                                                 //不在目标月表示,一个月都是满的
  20.                                                 count += days[month1 - 1];
  21.                                         }
  22.                                 }
  23.                         }
  24.                         //没到目标年的操作
  25.                         else
  26.                         {
  27.                                 for (; month1 <= 12; month1++)
  28.                                 {
  29.                                         //计算当前月的天数
  30.                                         count += days[month1 - 1] - day1;        //一开始不是一个完整的月所以要减去过去的天数:例如 5月2号,那么五月就剩下了 31-2=29天
  31.                                         day1 = 0;                //清除过去的天数
  32.                                 }
  33.                         }
  34.                         month1 = 1;                //设置回到1月
  35.                 }


  36.                 printf("你在这个世界上总共生存了%d天\n", count);
复制代码
最佳答案
0 
累计签到:20 天
连续签到:1 天
lwhnx  楼主| 发表于 2017-12-7 21:46:18 | 显示全部楼层
qq1242009750 发表于 2017-12-7 20:09
估计是算法的问题,给你写了一个算法,输入方式还是你的那个输入方式
...

谢谢,我贴的代码,只是那个INT那里不同, 结果有个正确 有个不正确,不知道为什么
最佳答案
10 
累计签到:288 天
连续签到:9 天
qq1242009750 发表于 2017-12-7 22:34:46 | 显示全部楼层
lwhnx 发表于 2017-12-7 21:46
谢谢,我贴的代码,只是那个INT那里不同, 结果有个正确 有个不正确,不知道为什么

不会啊,一样的,只不过是变量分开定义了。

发表回复

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

本版积分规则

关闭

小甲鱼强烈推荐 上一条 /2 下一条

    移动客户端下载(未启用)
    微信公众号

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备11014136号

Copyright 2018 鱼C论坛 版权所有 All Rights Reserved.

Powered by Discuz! X3.1 Copyright
© 2001-2018 Comsenz Inc.    All Rights Reserved.

小黑屋|手机版|Archiver|鱼C工作室 ( 粤公网安备 44051102000370号 | 粤ICP备11014136号

GMT+8, 2017-12-16 09:10

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