题目分析:

  1. 日期的表示:一共8位数,年应该为time/10000,日为time%100,月份为time%10000-time%100
  2. 排列大小,大的为 time1,小的为time2
  3. 日期相差,先将年月单独看,月份用不断增加到年月相等,同时建立一个数组记录每月天数,最后日期再用相减,日期相减+1再加上前面的天数为最终天数
  4. 做一个判断闰年的函数,是闰年为1,不是为0

代码实现

#include <stdio.h>

int month[13][2]={ {0,0},{31,31},{28,29},{31,31},{30,30},{31,31},
                {30,30},{31,31},{31,31},{30,30},{31,31},{30,30},{31,31}
                };
    isleap(int year){
        return(year%4==0&&year%100!=0)||(year%400==0);
    }

int main(){    

    int temp,time1,time2,y1,y2,m1,m2,d1,d2,days=0;

    while(scanf("%d%d",&time1,&time2)!=EOF){
        if(time1<time2){                        //输入两个一组的时间,并排列大小 
            temp=time2;
            time2=time1;
            time1=temp;
        }


        d1=time1%100;                            d2=time2%100;        
        y1=time1/10000;                        y2=time2/10000;
        m1=time1%10000/100;                m2=time2%10000/100;

        while(y1!=y2||m1!=m2){
        days+=month[m2][isleap(y2)];        //假设每月都从1号开始,先算月份相差的日期 
            if(++m2>12){
                m2=1;
                y2++;
            }
        }
        days=days+d1-d2+1;                    //月份相差日期加上号数相差为总相差 

        printf("%d\n",days);
        days=0;
    }

    return 0;
} 

要点记录

>while(scanf("%d%d",&time1,&time2)!=EOF)

EOF :End Of File的缩写,通常在文本的最后存在此字符表示资料结束,普遍地说,它是ASCII码中的替换字符(Control-Z,代码26),所以上述代码正常输入完毕后,换行输入 Ctrl+Z ,再输入Enter结束循环。
有一个问题不知道如何解释:输入时这样输入

20181222
20200515Ctrl+Z

会出现正确结果不断打印输出的情况