C++判断日期为一年中第几天

zjfgavin 2009-03-17 09:39:26
我刚学C++,遇到一道题目:输入年月日,输出该日期为这一年的第几天?涉及到闰年。自己写了代码,编译没问题,但输入日期后运行出错(dubge error),烦请高手帮忙,先谢谢了。
代码如下:
//===============================================================================================
//date.cpp
//===============================================================================================
#include <iostream>
using namespace std;
//-----------------------------------------------------------------------------------------------
int main ()
{
int year,month,day,a,b,i;
cout<<"Please input a date as 'yyyy mm dd'"<<"After input every pate please press 'Enter'"<<endl;
cin>>year>>month>>day;
//-------------------------------------------------
{
if((year%4==0)&&(year%100!=0)||(year%400==0))
a=1;
else
a=0;
}
//-------------------------------------------------
if (!((year>1980) && (month<13) && (day<32)))
cout<<"The date don't comform to routines"<<endl;
else
{
//-------------------------------------------
for(i=0;i<month;i++)
{
if (i=2)
b=b+28+a;
else
if (((i%2==1)&&(i<8))||((i%2==0)&&(i>7)))
b=b+31;
else
b=b+30;
}
//--------------------------------------------
cout<<"The day is the "<<b<<"of the year"<<endl;
}
}
//==============================================================================================
...全文
1113 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
jenglev 2009-04-30
  • 打赏
  • 举报
回复
//=============================================================================================== 
//date.cpp
//===============================================================================================
#include <iostream>
using namespace std;
//-----------------------------------------------------------------------------------------------
int main ()
{
int year,month,day,a,b=0,i;
cout <<"Please input a date as 'yyyy mm dd'\n" <<"After input every pate please press 'Enter'" <<endl;
cin>>year>>month>>day;
//-------------------------------------------------
{
if((year%4==0)&&(year%100!=0)||(year%400==0))
a=1;
else
a=0;
}
//-------------------------------------------------
if (!((year>1980) && (month <13) && (day <32)))
cout <<"The date don't comform to routines" <<endl;
else
{
//-------------------------------------------
for(i=1;i <month;i++) //从1开始
{
if (i==2)
b=b+28+a;
else
if (((i%2==1)&&(i <8))||((i%2==0)&&(i>7)))
b=b+31;
else
b=b+30;
}
b+=day; //day没有加
//--------------------------------------------
cout <<"The day is the " <<b <<" of the year" <<endl;

}
system("pause");
}
//==============================================================================================

帮你改好了,自己看看吧
michaelbupt2009 2009-04-30
  • 打赏
  • 举报
回复
楼主的程序健壮性稍微欠缺。
以下是一个参考程序。

#include <iostream>
using namespace std;
#include <stdio.h>
struct daynum
{
int year;
int month;
int day;
}data;
static bool temp;
static bool cheaktemp=1;
int leap[12]={31,29,31,30,31,30,31,31,30,31,30,31};
int calculate(daynum &,int[]);
bool leapyear(int &);
bool cheak();
void input();
void output(int);
void main()
{
do {input();temp=leapyear(data.year);}while (!cheak());
output(calculate(data,leap));
}
void input()
{
cout<<"请输入年、月、日:"<<endl;
cin>>data.year>>data.month>>data.day;
}
void output(int number)
{
if(data.month<3)
cout<<"您输入的日期在该年的第 "<<number<<" 天"<<endl;
else
{
if(temp)
cout<<"您输入的日期在该年的第 "<<number<<" 天"<<endl;
else
cout<<"您输入的日期在该年的第 "<<number-1<<" 天"<<endl;
}
}
int calculate(daynum &ptdata,int *ptleap)
{
int sum=0;
if (ptdata.month==1)
return ptdata.day;
else
{
for (int i=0;i<(ptdata.month-1);i++)
{
sum+=ptleap[i];
}
return (sum+ptdata.day);
}
}
bool leapyear(int &year)
{
return (year%4==0&&year%100!=0)||(year%400==0);
}

bool cheak()
{
if(data.month>12||data.month<1)
{cheaktemp=0; goto jump;}
if(data.month==2)
{
if(temp)
{
if(data.day>29||data.day<1)
cheaktemp=0
}
else
{
if(data.day>28||data.day<1)
cheaktemp=0;
}
}
else if(data.month==1||data.month==3||data.month==5||data.month==7||data.month==8||data.month==10||data.month==12)
{
if(data.day>31||data.day<1)
cheaktemp=0;
}
else
{
if (data.day<1||data.day>30)
cheaktemp=0;
}
jump:
if(!cheaktemp) cout<<"时间数据有错误!"<<endl<<endl;
return cheaktemp;
}
zjfgavin 2009-03-18
  • 打赏
  • 举报
回复
谢谢
leiXure 2009-03-17
  • 打赏
  • 举报
回复
是不是死循环了?
输入合法性检查之后:
if(i=2)
应该是
if(i == 2)

P.S. 在判断两个数是否相等的时候,最好将常量值放在 == 的左边,这样如果你把 == 误写成了 =,编译就会出错,不会等到运行时才被发现,所以上面那一句,更好的写法是
if(2 == i)

64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧