-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 ステートメントをできるだけ使用しないことをお勧めします。

あなたの場合、文字列の配列も適用できますが、スイッチケースの方が便利です

以下のコードを調べることができます。break ステートメントを削除してからコードを実行するか、 default ステートメントを削除して無効な入力を入力してからコードを実行することをお勧めします。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、ユーザーが入力した数値から減算する必要があります。おそらく、数値が 1 から 12 の間 (1 と 12 を含む) であることを確認するステートメントを追加することも必要になるでしょうifが、それは読者の演習として残します。

于 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" を出力します。ドイツ語、スペイン語を使用する人のための「ジュニオ」など。

于 2013-10-05T17:39:48.170 に答える
1

まず、月の名前を保持する変数を定義します。

string monthName;

次に、if else ネスト内のすべての cout コマンドの後に、次を追加します。

monthName.assign("YOUR_MONTH_HERE");

たとえば、月 = 1 の場合、上記の行は次のようになります。monthName.assign("January");

プログラムの最後で、 monthName を cout に入れるだけです。

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

これを行うにはいくつかの方法があります。まず、あなたのやり方は正しいですが、代わりに if ブロックの月の値に文字列を割り当て、代わりに文字列を最後に数えます。配列を知っている場合、別の簡単な方法は、月で配列を作成し、配列を計算することです[月番号] <-(そのステートメントでエラーを見つけることができますか)。

また、ユーザーが 1 から 12 までの数字を入力するまで、これをループに入れるのが最善です。

于 2013-10-05T17:02:48.903 に答える