我对C语言算是刚刚起步,最近想做一道关于计算生日的程序,可现在也没有搞明白,或者说是随便输入两个日期,能知道它们之间的天数,有这样的程序也可以指点一下,先谢谢拉!
----------------解决方案--------------------------------------------------------
#include<stdio.h>
int IsLeap(int year)
{
    if(year%4==0&&year%100!=0||year%400==0)
        return(1);
    return(0);
}
int main()
{
    int year1,month1,day1,year2,month2,day2;
    long n=0;
    printf("输入起始年份:");
    scanf("%d%d%d",&year1,&month1,&day1);
    printf("输入结束年份:");
    scanf("%d%d%d",&year2,&month2,&day2);
    while(year1<year2)
    {
        if(IsLeap(year1)==1)
        {
            n=n+366;
        }
        else
        {
            n=n+365;
        }
      year1++;
    }
    while(month1<month2)
    {
        switch(month1)
        {
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:n=n+31;break;
                case 4:
                case 6:
                case 9:
                case 11:n=n+30;break;
                case 2:
                    {
                        if(IsLeap(year1)==1)
                        {
                            n=n+29;
                        }
                        else
                        {
                            n=n+28;
                        }
                        break;
                    }
        }      
        month1++;
    }
    n=n+day2-day1;
    printf("%ld\n",n);
  return(0);
}
----------------解决方案--------------------------------------------------------
可以先在前面判断年份的大小,并且规定起始为小,结束为大.
用结构体来做比较方面,成员为,年,月,日.楼主试试吧
----------------解决方案--------------------------------------------------------
对了,首先谢谢你拉!不过我还想问一下:如果你输的日期都合法那是没什么说的,我想是不是还需要再加一些比如说判断输入日期是否有效,如果是无效输出说明,并且提示继续输入有效的日期什么的呢.能否再帮忙该一下,看看是不是有什么好的方法!再次感谢拉!
----------------解决方案--------------------------------------------------------
#include<stdio.h>
int IsLeap(unsigned int year)
{
    if(year%4==0&&year%100!=0||year%400==0)
        return(1);
    return(0);
}
int main(void)
{
    unsigned int year1,month1,day1,year2,month2,day2;
    unsigned long n=0;
    while (1)
   {
     printf("输入起始日期:");
     if((3==scanf ("%u%u%u",&year1,&month1,&day1))&&(month1<=12)&&(day1<=31))
      break;
     else
      fflush (stdin);
      printf ("你输入的日期有错,请重新输入!\n");
      continue;
    }
    while (1)
   {
     printf("输入结束日期:");
     if ((3==scanf("%u%u%u",&year2,&month2,&day2))&&(year2>=year1)&&(month2<=12)&&(day2<=31))
      break;
     else
      fflush (stdin);
      printf ("你输入的日期有错,请重新输入!\n");
      continue;
    }
    while (year1<year2)
   {
      if(IsLeap(year1)==1)
       n=n+366;
      else
       n=n+365;
      year1++;
    }
    while(month1<month2)
    {
        switch(month1)
        {
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:n=n+31;break;
                case 4:
                case 6:
                case 9:
                case 11:n=n+30;break;
                case 2:
                    {
                        if(IsLeap(year1)==1)
                        {
                            n=n+29;
                        }
                        else
                        {
                            n=n+28;
                        }
                        break;
                    }
        }
        month1++;
    }
    n=n+day2-day1;
    printf("%lu\n",n);
  return(0);
}
----------------解决方案--------------------------------------------------------
typedef struct{
    int year;
    int month;
    int date;
}time;
void Input(time &a)
{
    int flag;
    do{
           scanf("%d%d%d",&a.year,&a.month,&a.date);
           if(a.month>=1&&a.month<=12)
           {
                switch(a.month)
               {
                   case 4:
                   case 6:
                   case 9:
                   case 11:flag=1;
                   case 2:
                         {
                              if(IsLeap(a.year)==1)
                             {
                                  flag=0;
                             }
                             else
                             {
                                  flag=-1;
                             }
                             break;
                         }
              } 
              if(a.date>=1&&a.date<=31)
             {
                  if(flag==1&&a.data<31||flag==0&&a.date<30||flag==-1&&a.date<29)
                  {
                        break;
                  }
              }
         }
         printf ("你输入的日期有错,请重新输入!\n");
     }while(1);
}
/*主函数分别调用两次,给起始日期,和结束日期赋值*/
----------------解决方案--------------------------------------------------------
为了判断日期要写个这么多,谁不知道日期要这样规定的
不过还是严谨的好,楼主谢了
我没有编译和调试,楼主你自己弄一下
----------------解决方案--------------------------------------------------------
if((3==scanf ("%u%u%u",&year1,&month1,&day1))&&(month1<=12)&&(day1<=31))
在这个代码里那个3是什么啊,为什么不用1呢??
fflush (stdin);这个代码是什么作用?
先在这里说声谢谢了
----------------解决方案--------------------------------------------------------
不过我还要说一些动西的,在上面两个程序中都存在一些问题的,比如说同一年的不能计算,而且还有第一个日期的月份要是大于第二个的话也不行的.我想这个程序还需要改.确实一个很简单的问题需要注意的的确不少的啊!编程需要很严谨的算法啊!大家多努力吧!
----------------解决方案--------------------------------------------------------
TO zxd198778
fflush()函数冲洗流中的信息
在上面是为了清除多余字符的方法
----------------解决方案--------------------------------------------------------