我试图输出日期是否有效。我认为5-6-2013是有效的,但62-34-2013不是。当我将一个合法的日期(5,5,2013)放入main中的对象时,它会通过交换机运行正常,但是当我放入一个时髦的日期(例如,80,52,2013)时它只输出日期但没有说"无效的日期" 我在这里错过了什么? (请忽略我在整个代码中的所有明显评论 - 它们帮助我记住我的位置并使其更具可读性)谢谢!
#include <iostream>
#include <cmath>
#include <string>
#include <stdio.h>
using namespace std;
class dateType
{
// defining the class
public:
void setDate(int month, int day, int year);
// Function to set the date
int getDay() const;
int getMonth() const;
int getYear() const;
void printDate() const;
dateType(int month, int day, int year);
dateType();
bool isLeapYear(int yNumber);
int dMonth;
int dDay;
int dYear;
private:
int yearCalc;
// integer to store the year, only numbers above 0 will be valid
int monthCalc;
// variable to store the month, January through December (1-12)
int dayCalc;
// variable to store the day, this varies depending on the month
// aka 28 days in February unless it is a leap year, 31 days January, etc.
int outputDate;
//
};
// function definitions - setDate needs to check for validity
void dateType::setDate(int month, int day, int year)
{
bool notValid;
// we need to use a switch in order to run through each month.
switch (month)
{
// months with 28 days - February (2), unless Leap year - test for Leap year
case 2:
cout << "February" << endl;
if (isLeapYear(year))
cout << "Leap year - 29 days" << endl;
if (day > 29)
notValid = true;
break;
// months with 31 days - April (4), June (6), September (9) November(11)
case 4:
cout << "April - valid, 30 days" << endl;
break;
case 6:
cout << "June - valid, 30 days" << endl;
break;
case 9:
cout << "September - valid, 30 days" << endl;
break;
case 11:
cout << "November - valid, 30 days" << endl;
if (day > 30)
notValid = true;
break;
// months with 31 days - January (1), March (3), May (5) July(7), August (8), October (10), December (12)
// will not incude break statement as we do not want to break
// out of switch until the 31 day checks have been run through
case 1:
cout << "January - valid, 31 days" << endl;
break;
case 3:
cout << "March - valid, 31 days" << endl;
// printing out as a test to validate these months
break;
case 5:
cout << "May - valid, 31 days" << endl;
break;
case 7:
cout << "July - valid, 31 days" << endl;
break;
case 8:
cout << "August - valid, 31 days" << endl;
break;
case 10:
cout << "October - valid, 31 days" << endl;
break;
case 12:
cout << "December - valid, 31 days" << endl;
if (day >= 32)
notValid = true;
cout << "This is not a valid entry" << endl;
break;
// now break as we have checked all months ending in 31 days
}
dMonth = month;
dDay = day;
dYear = year;
}
int dateType::getDay() const
{
return dDay;
}
int dateType::getMonth() const
{
return dMonth;
}
int dateType::getYear() const
{
return dYear;
}
void dateType::printDate() const
{
cout << dMonth << "-" << dDay << "-" << dYear;
}
dateType::dateType(int month, int day, int year)
{
setDate(month, day, year);
}
bool dateType::isLeapYear(int yNumber)
{
if ((yNumber % 4 == 0 && yNumber % 100 != 0) || (yNumber % 400 == 0))
return true;
else
return false;
}
int main()
{
int day;
int month;
int year;
dateType year1(80, 52, 2013);
cout << "Date: ";
year1.printDate();
system("pause");
return 0;
}
答案 0 :(得分:0)
试试这段代码:
#include <iostream>
#include <cmath>
#include <string>
#include <stdio.h>
using namespace std;
class dateType {
// defining the class
public:
void setDate(int month, int day, int year);
// Function to set the date
int getDay() const;
int getMonth() const;
int getYear() const;
void printDate() const;
dateType(int month, int day, int year);
dateType();
bool isLeapYear(int yNumber);
int dMonth;
int dDay;
int dYear;
private:
int yearCalc;
// integer to store the year, only numbers above 0 will be valid
int monthCalc;
// variable to store the month, January through December (1-12)
int dayCalc;
// variable to store the day, this varies depending on the month
// aka 28 days in February unless it is a leap year, 31 days January, etc.
int outputDate;
//
};
// function definitions - setDate needs to check for validity
void dateType::setDate(int month, int day, int year) {
bool notValid;
// we need to use a switch in order to run through each month.
switch (month) {
// months with 28 days - February (2), unless Leap year - test for Leap year
case 2:
cout << "February" << endl;
if (isLeapYear(year))
cout << "Leap year - 29 days" << endl;
if (day > 29)
notValid = true;
break;
// months with 31 days - April (4), June (6), September (9) November(11)
case 4:
cout << "April - valid, 30 days" << endl;
break;
case 6:
cout << "June - valid, 30 days" << endl;
break;
case 9:
cout << "September - valid, 30 days" << endl;
break;
case 11:
cout << "November - valid, 30 days" << endl;
if (day > 30)
notValid = true;
break;
// months with 31 days - January (1), March (3), May (5) July(7), August (8), October (10), December (12)
// will not incude break statement as we do not want to break
// out of switch until the 31 day checks have been run through
case 1:
cout << "January - valid, 31 days" << endl;
break;
case 3:
cout << "March - valid, 31 days" << endl;
// printing out as a test to validate these months
break;
case 5:
cout << "May - valid, 31 days" << endl;
break;
case 7:
cout << "July - valid, 31 days" << endl;
break;
case 8:
cout << "August - valid, 31 days" << endl;
break;
case 10:
cout << "October - valid, 31 days" << endl;
break;
case 12:
cout << "December - valid, 31 days" << endl;
break;
// now break as we have checked all months ending in 31 days
default:
cout << "This is not a valid entry" << endl;
break;
}
if (day >= 32) {
notValid = true;
cout << "This is not a valid entry" << endl;
}
dMonth = month;
dDay = day;
dYear = year;
}
int dateType::getDay() const {
return dDay;
}
int dateType::getMonth() const {
return dMonth;
}
int dateType::getYear() const {
return dYear;
}
void dateType::printDate() const {
cout << dMonth << "-" << dDay << "-" << dYear;
}
dateType::dateType(int month, int day, int year) {
setDate(month, day, year);
}
bool dateType::isLeapYear(int yNumber)
{
if ((yNumber % 4 == 0 && yNumber % 100 != 0) || (yNumber % 400 == 0))
return true;
else
return false;
}
int main() {
int day;
int month;
int year;
dateType year1(80, 52, 2013);
cout << "Date: ";
year1.printDate();
system("pause");
return 0;
}
default
您错过了switch(month)
个案。你还必须移动它:
if (day >= 32) {
notValid = true;
cout << "This is not a valid entry" << endl;
}
切换块后。如果月份有效,但是这一天不会处理这种情况。您在if块中也错过了{}
。
答案 1 :(得分:0)
如果月份不在您指定的某个值中,则除了设置月份外,不会执行任何操作。因此,对于52,因为没有case 52
或default
,它只是将月份设置为52,这就是全部。