|
![]() | 作者: gentleman [gentleman]
![]() |
登录 |
main() { int year,year1,year2,leap,month1,month2,md1,md2,day1,day2,leap1,leap2,total; printf("input:year1,month1,day1,year2,month2,day2"); scanf("%d,%d,%d,%d,%d,%d",&year1,&month1,&day1,&year2,&month2,&day2); leap=0;leap1=0;leap2=0; for(year=year1;year<=year2;year++) { if ((year%4==0 && year%100!=0)||(year%400==0)) leap=leap+1; } switch(month1) { case 1: md1=day1;break; case 2: md1=day1+31;break; case 3: md1=day1+59;break; case 4: md1=day1+90;break; case 5: md1=day1+120;break; case 6: md1=day1+151;break; case 7: md1=day1+181;break; case 8: md1=day1+212;break; case 9: md1=day1+243;break; case 10: md1=day1+273;break; case 11: md1=day1+304;break; case 12: md1=day1+334;break; } switch(month2) { case 1: md2=day2;break; case 2: md2=day2+31;break; case 3: md2=day2+59;break; case 4: md2=day2+90;break; case 5: md2=day2+120;break; case 6: md2=day2+151;break; case 7: md2=day2+181;break; case 8: md2=day2+212;break; case 9: md2=day2+243;break; case 10: md2=day2+273;break; case 11: md2=day2+304;break; case 12: md2=day2+334;break; } if((year1%4==0&&year1%100!=0)||(year1%400==0)) leap1=1;md1+=1; if((year2%4==0&&year2%100!=0)||(year2%400==0)) leap2=1;md2+=1; if(month1<=3&&month2<=3) total=(year2-year1)*365+(md2-md1)+day2-day1+leap-leap1; if(month1<=3&&month2>3) total=(year2-year1)+(md2-md1)+day2-day1+leap; if(month1>3&&month2<=3) total=(year2-year1)*365+(md2-md1)+day2-day1+leap-leap1-leap2; if(month1>3&&month2>3) total=(year2-year1)*365+(md2-md1)+day2-day1+leap-leap2; if(month1=month2) total=day2-day1; printf("total=%d",total); 』 为什么同一月份的天数可以算,而不同月份就只能算后面的天数了啊!! 我的switch有错吗??? 急求救!!! |
地主 发表时间: 11/15 14:32 |
![]() | 回复: lwei889 [lwei889] ![]() |
登录 |
main() { int year,year1,year2,leap,month1,month2,md1,md2,day1,day2,leap1,leap2,total; clrscr(); printf("input:year1,month1,day1,year2,month2,day2:"); scanf("%d,%d,%d,%d,%d,%d",&year1,&month1,&day1,&year2,&month2,&day2); leap=0;leap1=0;leap2=0; for(year=year1;year<=year2;year++) { if ((year%4==0 && year%100!=0)||(year%400==0)) leap=leap+1; } switch(month1) { case 1: md1=day1;break; case 2: md1=day1+31;break; case 3: md1=day1+59;break; case 4: md1=day1+90;break; case 5: md1=day1+120;break; case 6: md1=day1+151;break; case 7: md1=day1+181;break; case 8: md1=day1+212;break; case 9: md1=day1+243;break; case 10: md1=day1+273;break; case 11: md1=day1+304;break; case 12: md1=day1+334;break; } switch(month2) { case 1: md2=day2;break; case 2: md2=day2+31;break; case 3: md2=day2+59;break; case 4: md2=day2+90;break; case 5: md2=day2+120;break; case 6: md2=day2+151;break; case 7: md2=day2+181;break; case 8: md2=day2+212;break; case 9: md2=day2+243;break; case 10: md2=day2+273;break; case 11: md2=day2+304;break; case 12: md2=day2+334;break; } if((year1%4==0&&year1%100!=0)||(year1%400==0)) {leap1=1;md1+=1;} /*这个地方我认为应该有个大括号*/ if((year2%4==0&&year2%100!=0)||(year2%400==0)) {leap2=1;md2+=1; } /*这个也应该有*/ if(month1<=3&&month2<=3) total=(year2-year1)*365+(md2-md1)+day2-day1+leap-leap1; if(month1<=3&&month2>3) total=(year2-year1)*365+(md2-md1)+day2-day1+leap; /*我想应该是 (year2-year1)*365 */ if(month1>3&&month2<=3) total=(year2-year1)*365+(md2-md1)+day2-day1+leap-leap1-leap2; if(month1>3&&month2>3) total=(year2-year1)*365+(md2-md1)+day2-day1+leap-leap2; if((month1==month2)&&(year1==year2)) /*如果是month1=month2,是赋值,则永远为真*/ total=0; printf("total=%d",total); getch(); } 上面的注释是我发现的问题,但还有个问题,就是当你输入的两个日期正好相差一年的话,你看一下,结果是364,我想不对吧,你自己找毛病吧? 你的switch 没有毛病,出现问题的是你的判断语句! 我眼都花了,不找了,要休息了! |
B1层 发表时间: 11/15 20:22 |
![]() | 回复: gentleman [gentleman] ![]() |
登录 |
谢谢了啊!! 我这个好像if太多了啊!!!猜是判断出错把!! 可能要改一下啊!! |
B2层 发表时间: 11/15 22:56 |
![]() | 回复: 286 [unique] ![]() |
登录 |
兄弟,下次再发这样程序的时候,先简单说明一下你的程序是干什么的。不然,谁知道你是作什么的? 你这样作太麻烦了。而且容易出错。 有一个time_t的结构,定义二个该结构的变量,然后调用difftime函数,可以得出两个时间之间的差,单位是秒,把该值除了24*60*60就得到天了。 你可以试试。我以前作过一个生物钟的程序,但后来源程序找不到了。 |
B3层 发表时间: 11/17 09:58 |
![]() | 回复: zhoen889 [zhoen889] ![]() |
登录 |
#include<iostream.h> void main() { int year;//年份 int month;//月份 int day;//天数 int days;//计算天数 int leap;//判断是否匀年变量 int *p;//指针变量 int day_tab[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,30},{0,31,29,31,30,31,30,31,31,30,31,30,30}}; cout<<"Input year,month,day:"; cin>>year>>month>>day; leap=(year%4==0&&year%100!=0||year%400==0); days=day; for(p=day_tab[leap]+1;p<day_tab[leap]+month;p++) days=days+(*p); cout<<"Today is:"<<days<<endl; } 我感觉c语言中的switch语句太过麻烦,虽然有的时候还不得不用。 下面是我用c++写的一个有关计算天数的程序,已经在vc中运行成功,请各位高手指教。 :) [此贴被 zhoen889(zhoen889) 在 11月28日19时48分 编辑过] [此贴被 zhoen889(zhoen889) 在 11月28日19时23分 编辑过] [此贴被 zhoen889(zhoen889) 在 11月28日19时18分 编辑过] |
B4层 发表时间: 11/27 19:25 |
![]() | 回复: bluezzb [bluezzb] ![]() |
登录 |
286真牛啊! |
B5层 发表时间: 11/28 07:08 |
![]() | 回复: ziaichen [ziaichen] ![]() |
登录 |
你是想算两个日期之间的天数是多少吧? 其实你没必要那么麻烦的 定义一个数组int *day[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}}; 然后再判断是否为闰年,定义一个记数变量,再用指针来判定,将两个日期转换为时间的任一单位来计量,最后进行计算和换算,就可以了. [此贴被 ziaichen(ziaichen) 在 11月28日08时31分 编辑过] |
B6层 发表时间: 11/28 07:58 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号