为什么计算闰年是错误的,还有球优化代码
- C/C++ code
#include<iostream>using namespace std;int m[]={31,28,31,30,31,30,31,31,30,31,30,31};class date{private: int year,month,day; int dayst; int c_m,c_d; bool LeepYear; public: void GetDate(int y,int m,int d); bool IsLeepYear(int y); void Count(); void PutDate(int y,int x); void print1(); void print2(); void print3();};void date::GetDate(int y,int m,int d){ year=y; month=m; day=d;}bool date::IsLeepYear(int y){ year=y; if(y%400==0||(y%4==0&&y%100!=0)) return 1; else return 0;}void date::PutDate(int y,int x){ LeepYear=IsLeepYear(y); if(LeepYear) { m[1]++; } for(int i=0;m[i]<x;i++) { x-=m[i]; } c_m=i+1; c_d=x;}void date::Count(){ dayst=0; for(int i=0;i<month-1;i++) dayst+=m[i]; dayst+=day; LeepYear=IsLeepYear(year); if(LeepYear&&month>2) dayst++;}void date::print1(){ cout<<year<<"年"<<month<<"月"<<day<<"日"<<"是第"<<dayst<<"天"<<endl; cout<<endl;}void date::print2(){ cout<<"该天是"<<c_m<<"月"<<c_d<<"日"<<endl; cout<<endl;}void date::print3(){ if(LeepYear) cout<<year<<"年是闰年"<<endl; else cout<<year<<"年不是闰年"<<endl; cout<<endl;}void main(){ cout<<" 1、给出年,月,日,计算出该天是一年中的第几天。"<<endl; cout<<" 2、知道第几天,计算出该天的具体日期。"<<endl; cout<<" 3、计算给定的年份是否是闰年。"<<endl; cout<<" 0、退出程序"<<endl; int x; cin>>x; int y,m,d; switch(x) { case 1: cout<<"输入年月日"<<endl; cin>>y>>m>>d; date obj1; obj1.GetDate(y,m,d); obj1.IsLeepYear(y); obj1.Count(); obj1.print1(); main(); break; case 2: cout<<"输入年和天数"<<endl; cin>>y>>d; date obj2; obj2.IsLeepYear(y); obj2.PutDate(y,d); obj2.print2(); main(); break; case 3: cout<<"输入年份:"<<endl; cin>>y; date obj3; obj3.IsLeepYear(y); obj3.print3(); main(); break; case 0: break; default: cout<<"只能输入123"<<endl; cout<<endl; main(); break; }}
[解决办法]
obj3.IsLeepYear(y);这个函数里面没有对 LeepYear变量进行修正,一直是true,下一行obj3.print3();函数中LeepYear一直是true当然全部打印出闰年出来。