-3

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

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

}

4

5 回答 5

8

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

我还建议使用 switch-case 并尽可能避免使用 if 语句。

在您的情况下,字符串数组也适用,但 switch-case 更方便

您可以检查以下代码。我建议删除 break 语句然后运行代码删除默认语句并输入无效输入然后运行代码。它将帮助您了解 switch-case 的工作原理

#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);
}
于 2013-10-05T16:59:13.163 回答
4

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

不是字符串,而是字符串数组可用于使您的代码更加紧凑,正如 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,但我将把它留给读者作为练习。

于 2013-10-05T17:01:02.703 回答
2

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

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”等。

于 2013-10-05T17:39:48.170 回答
1

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

string monthName;

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

monthName.assign("YOUR_MONTH_HERE");

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

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

cout<< "The month is "<<monthName;
于 2013-10-05T17:53:07.853 回答
0

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

此外,最好将其置于循环中,直到用户输入 1 到 12 之间的数字

于 2013-10-05T17:02:48.903 回答