| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 680 人关注过本帖
标题:紧急请教!
只看楼主 加入收藏
张仪
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2006-8-7
收藏
 问题点数:0 回复次数:9 
紧急请教!

我对C语言算是刚刚起步,最近想做一道关于计算生日的程序,可现在也没有搞明白,或者说是随便输入两个日期,能知道它们之间的天数,有这样的程序也可以指点一下,先谢谢拉!

搜索更多相关主题的帖子: C语言 生日 
2006-08-11 19:38
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 


#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);
}


倚天照海花无数,流水高山心自知。
2006-08-11 20:50
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
可以先在前面判断年份的大小,并且规定起始为小,结束为大.
用结构体来做比较方面,成员为,年,月,日.楼主试试吧

倚天照海花无数,流水高山心自知。
2006-08-11 20:51
张仪
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2006-8-7
收藏
得分:0 
对了,首先谢谢你拉!不过我还想问一下:如果你输的日期都合法那是没什么说的,我想是不是还需要再加一些比如说判断输入日期是否有效,如果是无效输出说明,并且提示继续输入有效的日期什么的呢.能否再帮忙该一下,看看是不是有什么好的方法!再次感谢拉!
2006-08-12 19:58
shuaiye
Rank: 1
等 级:新手上路
帖 子:445
专家分:0
注 册:2006-5-15
收藏
得分: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);

}


由于工作,N久都没来了!
2006-08-12 21:07
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分: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);
}
/*主函数分别调用两次,给起始日期,和结束日期赋值*/


倚天照海花无数,流水高山心自知。
2006-08-12 21:34
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
为了判断日期要写个这么多,谁不知道日期要这样规定的
不过还是严谨的好,楼主谢了
我没有编译和调试,楼主你自己弄一下

倚天照海花无数,流水高山心自知。
2006-08-12 21:36
zxd198778
Rank: 1
等 级:新手上路
帖 子:99
专家分:0
注 册:2006-7-30
收藏
得分:0 
if((3==scanf ("%u%u%u",&year1,&month1,&day1))&&(month1<=12)&&(day1<=31))
在这个代码里那个3是什么啊,为什么不用1呢??
fflush (stdin);这个代码是什么作用?
先在这里说声谢谢了

我一个不懂世事的人,希望能在这里学到我想学的一些东西。
2006-08-12 23:08
张仪
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2006-8-7
收藏
得分:0 
不过我还要说一些动西的,在上面两个程序中都存在一些问题的,比如说同一年的不能计算,而且还有第一个日期的月份要是大于第二个的话也不行的.我想这个程序还需要改.确实一个很简单的问题需要注意的的确不少的啊!编程需要很严谨的算法啊!大家多努力吧!
2006-08-13 11:41
wolf_elite
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2006-6-26
收藏
得分:0 
TO zxd198778
fflush()函数冲洗流中的信息
在上面是为了清除多余字符的方法

2006-08-13 14:04
快速回复:紧急请教!
数据加载中...
 
   



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

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