编写一个程序,输入数字 1-12 并输出相应的月份

writting a program that inputs a number 1-12 and outputs the corresponding month

本文关键字:输出 1-12 数字 输入 程序 一个      更新时间:2023-10-16

我的程序假设提示用户输入数字1-12并输出相应的月份。 好的,我知道我错过了这个程序的一个非常重要的部分,但我知道我正在努力弄清楚该使用什么。我是否需要一个包含所有月份名称的字符串?我也知道我需要在 cout<<"月份是"之后放一些东西<<有些东西必须放在这里,所以答案会打印出来,但我现在不确定是什么。我也认为我需要 int month= 一些东西,但不确定它应该是 1-12 还是月名。这是我编辑的程序,它正在运行,但现在它有一个调试错误,变量"month"在没有初始化的情况下被使用。那是什么意思?

#include <iostream>
#include <string>
using namespace std;
char chr;
int main()
{
int month;
cout<<"Enter a number from 1-12.";
if (month ==1)
    cout<<"January";
else if (month==2)
    cout<< "February";
else if (month==3)
    cout<<"March";
else if (month==4)
    cout<<"April";
else if (month==5)
    cout<<"May";
else if (month==6)
    cout<<"June";
else if (month==7)
    cout<<"July";
else if (month==8)
    cout<<"August";
else if (month==9)
    cout<<"September";
else if (month==10)
    cout<<"October";
else if (month==11)
    cout<<"November";
else if (month==12)
    cout<<"December";
else if (month>12)
    cout<<"Sorry I need a number from 1-12."<<endl;          
else if(month<=12) 
    cout<< "The month is "<<month;
cin>>chr;
return 0;

}

你应该使用cin>>month;在 if 语句之前。因为如果您不使用它,则来自键盘的输入将永远不会分配给您的整数。

我还建议使用开关大小写,并尽可能避免使用 if 语句。

在您的情况下,字符串数组也适用,但开关盒更方便

您可以检查以下代码。我建议删除中断语句然后运行代码或删除默认语句并输入无效的 inpu 然后运行代码。它将帮助您了解开关外壳的工作原理

#include <iostream>
using namespace std;
int main (){
    int month;
    cout<<"Enter month: ";
    cin>>month;
    switch(month){
    case 1:
        cout<<"Jan"<<endl;
        break;
    case 2:
        cout<<"Feb"<<endl;
        break;
    case 3:
        cout<<"Mar"<<endl;
        break;
    case 4:
        cout<<"Apr"<<endl;
        break;
    case 5:
        cout<<"May"<<endl;
        break;
    case 6:
        cout<<"Jun"<<endl;
        break;
    case 7:
        cout<<"Jul"<<endl;
        break;
    case 8:
        cout<<"Aug"<<endl;
        break;
    case 9:
        cout<<"Sep"<<endl;
        break;
    case 10:
        cout<<"Oct"<<endl;
        break;
    case 11:
        cout<<"Nov"<<endl;
        break;
    case 12:
        cout<<"Dec"<<endl;
        break;
    default: // default is for when you enter a number out of 1-12 range. for instance, 13
        cout<<"invalid input!"<<endl;
    }
    return (0);
}

我是否需要一个包含所有月份名称的字符串?

不是字符串,

而是字符串数组可以用来使代码更加紧凑,正如 Timur 指出的那样,您可以使用cin从控制台输入中读取:

#include <iostream>
#include <string>
using namespace std;
int main()
{
    int m;
    string months[] = {"Jan", "Feb", "Mar", "Apr", "May",
                       "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
    cout << "Enter a month number: ";
    cin >> m;
    cout << "You selected " << months[m-1] << endl;
    return 0;
}

数组索引在 C/C++ 中从 0 开始,这就是为什么您需要从用户输入的数字中减去 1。您可能还需要添加一个 if 语句,以确保数字介于 1 和 12 之间(包括 1 和 12),但我会将其留给读者作为练习。

与其自己做这件事,我想我会使用标准库中内置的一些函数:

struct tm t = { 0 };
std::cin >> t.tm_mon;
char buffer[32];
strftime(buffer, sizeof(buffer), "%B", &t);
std::cout << buffer;

除此之外,这还具有区域设置感知的优点,因此,如果(例如)您执行以下操作:

setlocale(LC_ALL, "de-DE");

。在执行上面的代码之前,用户输入,比如说,5,你会得到德语的结果("Juni")。通常你想使用:setlocale(LC_ALL, "");,它检索用户已为其设置操作系统的区域设置,并使用它,因此根本不修改您的代码,它会为我打印"June",为使用德语的人打印"Juni",为使用西班牙语的人打印"Junio",等等。

首先,定义一个变量来保存月份的名称:

string monthName;

然后在 if else 嵌套中的每个 cout 命令之后,添加以下内容:

monthName.assign("YOUR_MONTH_HERE");

例如,如果 month=1,则上面的行应monthName.assign("January");

在程序结束时,只需将 monthName 放入 cout:

cout<< "The month is "<<monthName;

有几种方法可以做到这一点。首先,你的方式是正确的,但是我会在 if 块中为一个字符串分配月份值,并在末尾引用字符串。另一种更简单的方法是,如果你知道数组,是用月份创建一个数组,然后<-(你能找到该语句中的错误吗)。

此外,最好将其放在一个循环中,直到用户输入 1 到 12 之间的数字