0

我正在做这个编程任务,让我创建一个程序,根据用户输入的月份和年份来处理杂志订阅的续订和取消通知。该程序的一部分侧重于重用旧代码(这是扩展开关的来源)。我使用重用代码而不是显示实际月份创建的函数将月份等同于一个数字(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;
}
4

2 回答 2

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;
}

主要使用这个函数作为

month=convertMonthNUmber(month_num);

现在该月份将具有给定月份编号的相应月份名称

于 2012-10-18T08:14:49.863 回答
0

我在您的代码中看到两个问题。第一个是您在if 语句中使用=而不是。第二个是,您似乎正在尝试重新声明变量。由于它是通过引用传递的,因此您应该简单地重新分配它(使用而不是)。==convertMonthNumbermonthmonth = Januarystring month = January

于 2012-10-15T21:32:34.653 回答