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

関数が文字列を返すようにします。関数に 1 つのパラメーター (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

あなたのコードには 2 つの問題があります。1 つ目は、if ステートメント=の代わりに使用していることです。2 つ目は、変数を再宣言しようとしているようです。これは参照によって渡されるため、単純に再割り当てする必要があります (の代わりに使用します)。==convertMonthNumbermonthmonth = Januarystring month = January

于 2012-10-15T21:32:34.653 に答える