标题:输入某年某月某日,判断这一天是这一年的第几天?我错在哪里
取消只看楼主
鱼竿的传说
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2012-3-15
结帖率:100%
已结贴  问题点数:5 回复次数:3 
输入某年某月某日,判断这一天是这一年的第几天?我错在哪里
如题,也是C经典100例里面的,答案用的是swith语句,我尝试用数组,但输出结果怎么就是随机值呢:

代码如下:

#include<stdio.h>

int main()
{
    int a[12],i;
    int year,month,date,day;

    a[12]={31,28,31,30,31,30,31,31,30,31,30,31};

    printf("Please input year,month,date:\n\n");
    scanf("%d,%d,%d",&year,&month,&date);

    if(month>12||date>31)
        printf("enter error,please try again!\n\n");  /*如果大于31天或者大于12个月,错误*/


    for(i=0;i<month;i++)
    day+=a[i];
   
    if(month>2)                              /*如果是2月以后的月份,就得考虑这一年是闰年否*/
      if(year%4==0&&year%100!=0||year%400==0)
        { day++;
          printf("this year is a leap.\n");
        }
   
    printf(the date is the %d day of the year!",day);
    return 0;
}

我是在gcc里面运行的,编译倒是没有问题,但是运行这个文件的时候,我输入2010,1,1,输出结果为随机值,怎么回事?是我哪里错了?  谢谢!
搜索更多相关主题的帖子: include please 
2012-03-19 22:46
鱼竿的传说
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2012-3-15
得分:0 
回复 3楼 embed_xuel
我把错误的地方找到了,然后改正了,
下面是我的   在语法上应该没问题的代码
#include "stdio.h"
int main()
{
    int a[12]={31,28,31,30,31,30,31,31,30,31,30,31},i;
    int day=0,year,month,date;


    printf("Please input year,month,date:\n\n");
    scanf("%d,%d,%d",&year,&month,&date);

    if(month>12||date>31)
        printf("enter error,please try again!\n\n");


    else {
            for(i=0;i<month;i++)
            day+=a[i];
            if(month>2)
              if(year%4==0&&year%100!=0||year%400==0)
                {
                    day++;
                      printf("this year is a leap.\n");
                }
         printf("the date is the %d day of the year!",day);
         }
    return 0;

而且我编译运行发现,它输出的并不是随机数,而是前面几个月的 总天数,比如输入2010,1,1--->31天,输入2010,2,1--->59天,输入2010,3,1---->90,一句话,就是真正的算法没有实现到,或者逻辑错误了,可我怎么都觉得是对的,能指教一下吗?谢谢!
2012-03-20 01:44
鱼竿的传说
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2012-3-15
得分:0 
回复 4楼 C_戴忠意
谢谢,不过你这个有问题
2012-03-20 01:55
鱼竿的传说
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2012-3-15
得分:0 
谢谢各位的关注,昨晚一觉睡醒,突然想起了我错误的地方了,然后我把for语句稍加改动就对了

原来的是
for(i=0;i<month;i++)
             day+=a[i];
 现在我改成 for(i=0;i<month-1;i++)
             day+=a[i];
              day=day+date;

自己分析的是:数组下表是从0开始的,但是for循环中第二条语句一旦表明可循环,那么就要执行循环体,如果取1月,那么i<month将为真,就该执行循环体了,所以就会输出31天。至于day=day+date,这条语句纯粹是自己搞忘了因为算法是:前面每个月的总天数+这个月的日期。
 
2012-03-20 10:06



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-363702-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.278094 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved