注册 登录
编程论坛 C++教室

数据准确性检测

呜呜1 发布于 2013-10-29 08:42, 523 次点击
#include<iostream>
using  namespace  std;
class  Date
{  private:
  int  year;
  int  month;
  int  day;

bool  isLeapYear();
public:
bool  check();
void set_date();
    void  show_date();
   
};
void  Date::set_date()
{   cin>>year;
     cin>>month;check();
     cin>>day;check();}
void  Date::show_date()
{ cout<<year<<" "<<month<<" "<<day<<endl;
}
bool Date::isLeapYear()
 {
     return (year%4==0 && year%100!=0)||(year%400==0);
 }
 bool Date::check()
 {
     
int max_day;
int max[12]={31,28,31,30,31,30,31,31,30,31,30,31};
     if(isLeapYear())
     { ++max[1];
     }
    max_day = max[month];
    /*if((month>12)||(day>max_day))
    {cout<<"输入错误,请重新输入:"<<endl;
         set_date();
    }*/
     
        if(month>12)
         { cout<<"输入月份错误,请重新输入:"<<endl;
         
            set_date();
         }
        max_day = max[month];
         if(day>max_day)
     {
         cout<<"输入天错误,请重新输入:"<<endl;
         set_date();
     }
 
    return  0;
 }
    int  main()
   
    {  Date  d;
cout<<"请输入一个四位的阿拉伯数字表示的年,一个两位阿拉伯数字表示的月,一个两位的阿拉伯数字表示的日,并用回车分别输入"<<'\n';
       d.set_date();
      
        d.show_date();
       cin.get();
       return  0;
       }
    我输入“2012 3 45 ”,运行结果显示输入天数错误,我重新输入“2012 3 4”结果还是显示输入天数错误,请大家看看程序哪里出现问题,求助
6 回复
#2
rjsp2013-10-29 09:57
void  Date::set_date()
{   cin>>year;
     cin>>month;check();
     cin>>day;check();}
day还未赋值,就check?
#3
nba1990442013-10-29 12:32
void  Date::set_date()
{   cin>>year;
     cin>>month;
    cin>>day;        
     check();
}你应该先接收完所有数据,在进行判断,逻辑错误
#4
苑天尤2013-10-29 13:38
#include<iostream>
 using  namespace  std;
 class  Date
 {  
 private:
   int  year;
   int  month;
   int  day;
   bool  isLeapYear();
public:
   bool  check();
   void  set_date();
   void  show_date();
     
};
  void  Date::set_date()
 {  
     cin>>year;
     cin>>month;check();
     cin>>day;check();
 }
 void  Date::show_date()
 {
     cout<<year<<" "<<month<<" "<<day<<endl;
 }
 bool Date::isLeapYear()
 {
      return (year%4==0 && year%100!=0)||(year%400==0);
 }
 bool Date::check()
 {   
    int max_day;
    int max[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
     if(isLeapYear())
      {
         ++max[2];
         cout<<"这一年是闰年"<<endl;
     }
   
     /*if((month>12)||(day>max_day))
     {cout<<"输入错误,请重新输入:"<<endl;
          set_date();
     }*/
      
         if(month>12)
          {
             cout<<"输入月份错误,请重新输入:"<<endl;
         
             set_date();
          }
         max_day = max[month];
          if(day>max_day)
      {
          cout<<"输入天错误,请重新输入:"<<endl;
          set_date();
      }

     return  0;
 }
     int  main()
     
    {  Date  d;
 cout<<"请输入一个四位的阿拉伯数字表示的年,一个两位阿拉伯数字表示的月,一个两位的阿拉伯数字表示的日,并用回车分别输入"<<'\n';
        d.set_date();
        
        d.show_date();
        cin.get();
        return  0;
        }
#5
呜呜12013-10-29 22:27
回复 4楼 苑天尤
我运行了你回复的程序,结果还是不行啊
#6
呜呜12013-10-29 22:34
回复 2楼 rjsp
我是想边接收数据,边进行检测,这样貌似不行啊,
#7
呜呜12013-10-29 22:36
回复 3楼 nba199044
灰常谢谢,我想边接受数据,边进行检测,结果没成功
1