急求助,C语言,计算两个日期之间的天数,不知道我的算法到底哪里错了,运行结果是错误的,求大神帮忙看看

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了急求助,C语言,计算两个日期之间的天数,不知道我的算法到底哪里错了,运行结果是错误的,求大神帮忙看看相关的知识,希望对你有一定的参考价值。

int difDays(struct Date *pt1,struct Date *pt2)

int a1,a2,b1,b2,c1,c2,days=0,day1=0,day2=0;

if(((pt1->year) > (pt2->year) )|| ((pt1->year) == (pt2->year) && (pt1->month)>(pt2->month)))

a1=pt2->year;
b1=pt2->month;
c1=pt2->day;

a2=pt1->year;
b2=pt1->month;
c2=pt1->day;

else

a1=pt1->year;
b1=pt1->month;
c1=pt1->day;

a2=pt2->year;
b2=pt2->month;
c2=pt2->day;

//判断年份是否相等,如果相等只需要计算月份之间的天数差距
if(a1=a2)

for(b1; b1<b2; b1++)

switch(b1)

case 1:case 3: case 5: case 7: case 8: case 10: case 12:
days=days+31;
break;
case 2:
if(( a1%4==0 && a1%100!=0 ) || ( a1%400==0 ))
days=days+29;
else
days=days+28;
break;
case 4: case 6: case 9: case 11:
days=days+30;
break;



days=days - c1 + c2;

else

//如果中间相隔年份
//计算中间年份的天数
a1=a1 + 1;
while(a1 < a2)

if(( a1%4==0 && a1%100!=0 ) || ( a1%400==0 ))

days=days+366;
a1++;

else

days=days+365;
a1++;



//计算首年的天数day1
a1=pt1->year;
for(b1; b1 <= 12; b1++)

switch(b1)

case 1:case 3: case 5: case 7: case 8: case 10: case 12:
day1=day1+31;
break;
case 2:
if(( a1%4==0 && a1%100!=0 ) || ( a1%400==0 ))
day1=day1+29;
else
day1=day1+28;
break;
case 4: case 6: case 9: case 11:
day1=day1+30;
break;


day1=day1-c1;

//计算尾年的天数dat2
for(b2=b2-1; b2 >= 1; b2--)

switch(b2)

case 1:case 3: case 5: case 7: case 8: case 10: case 12:
day2=day2+31;
break;
case 2:
if(( a1%4==0 && a1%100!=0 ) || ( a1%400==0 ))
day2=day2+29;
else
day1=day1+28;
break;
case 4: case 6: case 9: case 11:
day2=day2+30;
break;


day2=day2+b2;

//中间年份天数加上首尾年份的天数
days=days+day1+day2;

return days;

参考技术A 回答

6$Ok6KXtEsBG2$://--------ℇY2IR6Ymhh₣

6$Ok6KXtEsBG2$://--------ℇY2IR6Ymhh₣

参考技术B 这程序让人看得晕死了,要写函数的,一个闰年函数,一个本年计天函数,一个距1900年1月1日多少天的函数
三个函数写好了,日期差也就算出来了

C语言求两个日期相差的天数

#include <stdio.h>
int leap_year( int );
int year_days( int );
int days(int,int,int);

int leap_year( int year ) // 判断闰年或平年
return ( (year%4==0 && year%100!=0) || year%400==0 ) ? 1 : 0;


int year_days(int year) // 计算一整年的天数
return leap_year( year ) ? 366 : 365;


int days( int year, int month, int day ) // 计算该天month,day 是本年year的第几天
int months[13] = 0,31,28,31,30,31,30,31,31,30,31,30,31, i;

if ( leap_year( year ) && month >2 )
day++;

for ( i=1; i<month; i++ )
day += months[i];

return day;

int main()

int year1,month1,day1,year2,month2,day2,t,p,k,i;
scanf("%d%d%d",&year1,&month1,&day1);
scanf("%d%d%d",&year2,&month2,&day2);
p=365*(year2-year1);
for(i=1;i<(year2-year1);i++)

k=year1;
if(leap_year(k)==1)p++;k++;

t=days(year2,month2,day2)-days(year1,month1,day1)+p;
if(t==1)printf("1 day\n");
else printf("%d days\n",t);

不知道哪错了,求指点T^T

计算两个年月日之间的天数,思路是分别算出日期的总天数然后相减。
要考虑闰年的情况,判断闰年的口诀:4年一闰,100年不闰,400年再闰。
((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
网上找了一个(偷懒= =!),修改下如下:
#include <stdio.h>
int sum(int y,int m,int d)

unsigned char x[13]=0,31,28,31,30,31,30,31,31,30,31,30,31;
int i,s=0;
for(i=1;i<y;i++)
if(i%4==0 && i%100!=0 || i%400==0)
s+=366;//闰年
else
s+=365;//平年
if(y%4==0 && y%100!=0 || y%400==0)
x[2]=29;
for(i=1;i<m;i++)
s+=x[i];//整月的天数
s+=d;//日的天数
return s;//返回总天数,相对公元1年

void main()

unsigned char y1,m1,d1,y2,m2,d2;
int s1,s2;
printf("输入第一个年 月 日:");
scanf("%d %d %d",&y1,&m1,&d1);
printf("输入第二个年 月 日:");
scanf("%d %d %d",&y2,&m2,&d2);
s1=sum(y1,m1,d1);
s2=sum(y2,m2,d2);
if (s1 > s2)
printf("相差天数:%ld\n",s1-s2);
else
printf("相差天数:%ld\n",s2-s1);

以上代码VC6编译测试通过。
虽然这个思路显得有些笨,但是其它算法,代码太长太复杂,要考虑多种情况,不如直接算两个日期距离公元元年1月1日的天数,然后相减
参考技术A

你好!

   你的程序运行正常的,是不是你输入数据的时候格式有问题

   

参考技术B for循环里面k始终是year1。本回答被提问者采纳

以上是关于急求助,C语言,计算两个日期之间的天数,不知道我的算法到底哪里错了,运行结果是错误的,求大神帮忙看看的主要内容,如果未能解决你的问题,请参考以下文章

excel求助。计算特定时间段内星期一(到星期天)的天数的公式,附上解释。急!!!!!!!!!!!!!!

如何用c语言来计算日期间隔天数?

C++ 计算两个日期之间的天数

C语言求两个日期相差的天数

C语言中 求两个日期间的天数

C语言计算两日期间的天数