Closed. This question needs
details or clarity。它当前不接受答案。
想改善这个问题吗?添加详细信息并通过
editing this post阐明问题。
4年前关闭。
#include <iostream>
#include <stdio.h>
#include <cstdlib>
using namespace std;
int main()
{
int d,m,g;
int correctly=1;
cout<<"Insert date \n";
cin>>d;
cin>>m;
cin>>g;
if (d<1 || m<1 || m>12) correctly=0;
int numberofdays;
switch(m)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
numberofdays=31;
break;
case 4:
case 6:
case 9:
case 11:
numberofdays=30;
break;
case 2:
if (g%4==0 && g%100=0 || g%400==0)
numberofdays=29;
else
numberofdays=28;
break;
default:
numberofdays=0;
}
if (d>numberofdays) correctly=0;
if (correctly==1)
cout<<"Date is good.\n";
else
cout<<"Date is not good.\n";
system ("PAUSE");
return EXIT_SUCCESS;
}
我在尝试用1或0正确更改值时遇到错误,并且在尝试用!= 0更改0的情况下在2行中也遇到了这个错误,而且我真的不理解正确正确的部分如何工作。
而不是开关盒呢:
if (m>12 || m<1)
numberofdays=0;
else{
int days[]={31,28,31,30,31,30,31,31,30,31,30,31};
numberofdays=days[m-1]+(m==2 && (g%4==0 && g%100!=0 || g%400==0))?1:0;
}
如果您不知道三元数:
if (m>12 || m<1)
numberofdays=0;
else{
int days[]={31,28,31,30,31,30,31,31,30,31,30,31};
numberofdays=days[m-1];
if(m==2 && (g%4==0 && g%100!=0 || g%400==0))
numberofdays++;
}
编辑:
一些更多的技巧。如评论中所述,您可能打算使用d,m,y代替d,m,g。您无需验证年份,就可以将代码移至其他函数,因此不需要正确的变量。
bool validateDate(int d, int m, int g){ //Used g so you don't get too confused
if(d<1 || d>31 || m<1 || m>12 || g<0) //Not sure if you can have year 0
return false; //returns false immediately so you don't waste time checking other stuff
int days[]={31,28,31,30,31,30,31,31,30,31,30,31};
int numberofdays=days[m-1];
if(m==2 && (g%4==0 && g%100!=0 || g%400==0))
numberofdays++;
return d<=numberofdays;
//Should also add that the current format for leap years started at a certain year (google says 1582), so you might have to adjust for that.
}
通过以下方法从您的主函数调用它:
if (validateDate(d,m,g))
cout<<"Date is good.\n";
else
cout<<"Date is not good.\n";