[英]User-defined function for magazine subscription program
我正在編寫這個編程任務,讓我創建一個程序,根據用戶輸入的月份和年份處理雜志訂閱的續訂和取消通知。 該程序的一部分重點是重用舊代碼(這是擴展交換機的代碼)。 我使用重用代碼而不是顯示實際月份的函數將月份與數字相等(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;
}
使函數返回一個字符串。 在函數中傳遞一個參數(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);
現在月份將具有給定月份編號的相應月份名稱
我在你的代碼中看到了兩個問題。 第一個是你在convertMonthNumber
if-statements中使用=
而不是==
。 第二個是,你似乎試圖重新聲明month
變量。 由於它是通過引用傳遞的,因此您只需重新分配它(使用month = January
而不是string month = January
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.