我正在编写这个编程任务,让我创建一个程序,根据用户输入的月份和年份处理杂志订阅的续订和取消通知。该程序的一部分重点是重用旧代码(这是扩展交换机的代码)。我使用重用代码而不是显示实际月份的函数将月份与数字相等(1-12,与每个月相关)。我的问题是我正在尝试创建一个单独的函数来获取数字并将其转换为月份的实际名称。这就是我到目前为止所做的:
#include <iostream>
#include <string>
#include <iomanip>
#include <cstdlib>
using namespace std;
void getMonth(char first, char second, char third, int& monthNumber);
void getYear(int& yearNumber);
void convertMonthNumber(int monthNumber, string& month);
int main()
{
char first, second, third;
int monthNumber = 0;
int yearNumber = 0;
string month;
cout << "Subscription Evaluation Program";
cout << endl << endl;
getMonth(first, second, third, monthNumber);
getYear(yearNumber);
convertMonthNumber(monthNumber, month);
cout << "The current date is " << month << " " << yearNumber; //Test to see if convertMonthNumber works
system("PAUSE");
}
void getMonth(char first, char second, char third, int& monthNumber)
{
cout << "Enter first letter of the current month: ";
cin >> first;
switch(first)
{
case 'F':
case 'f':
{
int montNumber = 2;
}
break;
case 'S':
case 's':
{
int monthNumber = 9;
}
break;
case 'O':
case 'o':
{
int monthNumber = 10;
}
break;
case 'N':
case 'n':
{
int monthNumber = 11;
}
break;
case 'D':
case 'd':
{
int monthNumber = 12;
}
break;
case 'A':
case 'a':
{
cout << "Enter second character of month: ";
cin >> second;
switch(second)
{
case 'P':
case 'p':
{
int monthNumber = 4;
}
break;
case 'U':
case 'u':
{
int monthNumber = 8;
}
break;
default:
cout << "Unknown Month";
cout << endl;
}
}
break;
case 'J':
case 'j':
{
cout << "Enter second character of month : ";
cin >> second;
switch(second)
{
case 'A':
case 'a':
{
int monthNumber = 1;
}
break;
case 'U':
case 'u':
cout<<"\nEnter third character: ";
cin >> third;
switch(third)
{
case 'L':
case 'l':
{
int monthNumber = 7;
}
break;
case 'N':
case 'n':
{
int monthNumber = 6;
}
break;
default:
cout << "\nUnknown Month";
}
break;
default:
cout << "\nUnknown Month";
cout << endl;
}
break;
case 'M':
case 'm':
cout << "Enter second and third characters: ";
cin >> second;
cin >> third;
switch(second)
{
case 'A':
case 'a':
{
switch(third)
{
case 'R':
case 'r':
{
int monthNumber = 3;
}
break;
case 'Y':
case 'y':
{
int monthNumber = 5;
}
break;
default:
cout << endl << "Unknown Month";
cout << endl;
}
}
break;
default:
cout << endl << "Unknown Month";
cout << endl;
}
break;
default:
cout << endl << "Unknown Month";
cout << endl;
return;
}
}
}
void getYear(int& yearNumber)
{
const int LOW_YEAR_LIMIT = 2012;
const int HIGH_YEAR_LIMIT = 2017;
do{
cout << "Enter current year (4 digits): ";
cin >> yearNumber;
if (yearNumber < LOW_YEAR_LIMIT || yearNumber >= HIGH_YEAR_LIMIT){
cout << endl;
cout << "Invalid year. Please enter again.";
cout << endl << endl;
}
}while (yearNumber < LOW_YEAR_LIMIT || yearNumber >= HIGH_YEAR_LIMIT);
return;
}
void convertMonthNumber(int monthNumber, string& month)
{
if (monthNumber = 1)
string month = January;
else if (monthNumber = 2)
string month = February;
else if (monthNumber = 3)
string month = March;
else if (monthNumber = 4)
string month = April;
else if (monthNumber = 5)
string month = May;
else if (monthNumber = 6)
string month = June;
else if (monthNumber = 7)
string month = July;
else if (monthNumber = 8)
string month = August;
else if (monthNumber = 9)
string month = September;
else if (monthNumber = 10)
string month = October;
else if (monthNumber = 11)
string month = November;
else if (monthNumber = 12)
string month = December;
return;
}
所以我接受了你的一些建议并做了这个;这个月没有回来。
void convertMonthNumber(int monthNumber, string& month)
{
const string JANUARY = "January";
const string FEBRUARY = "February";
const string MARCH = "March";
const string APRIL = "April";
const string MAY = "May";
const string JUNE = "June";
const string JULY = "July";
const string AUGUST = "August";
const string SEPTEMBER = "September";
const string OCTOBER = "October";
const string NOVEMBER = "November";
const string DECEMBER = "December";
if (monthNumber == 1)
month = JANUARY;
else if (monthNumber == 2)
month = FEBRUARY;
else if (monthNumber == 3)
month = MARCH;
else if (monthNumber == 4)
month = APRIL;
else if (monthNumber == 5)
month = MAY;
else if (monthNumber == 6)
month = JUNE;
else if (monthNumber == 7)
month = JULY;
else if (monthNumber == 8)
month = AUGUST;
else if (monthNumber == 9)
month = SEPTEMBER;
else if (monthNumber == 10)
month = OCTOBER;
else if (monthNumber == 11)
month = NOVEMBER;
else if (monthNumber == 12)
string month = DECEMBER;
return;
}
答案 0 :(得分:2)
让你的函数返回一个字符串。在函数中传递一个参数(month_num)并在函数内声明一个本地字符串(month_name)变量并计算,赋值并返回month_name。我给了代码几个月,休息你可以填写
string convertMonthNUmber(int month_num)
{
string month_name;
if(month_num==1)
month_name="January";
else if(month_num==2)
month_name="February";
:
:
:
else
month_name="December";
return month_name;
}
在main中,使用此函数作为
month=convertMonthNUmber(month_num);
现在月份将具有给定月份数的相应月份名称
答案 1 :(得分:0)
我在你的代码中看到两个问题。第一个是您在=
if语句中使用==
而不是convertMonthNumber
。第二个是,您似乎试图重新声明month
变量。由于它是通过引用传递的,因此您只需重新分配它(使用month = January
代替string month = January
)。