web-dev-qa-db-ja.com

SwitchステートメントC ++の文字

助けてください!プログラムの出力を生成できません。これが条件です。購入したシャツがXLで、価格が500を超える場合、100ペソの割引を提供するプログラムを作成します。購入したシャツがLで、価格が600を超える場合は、50ペソの割引が適用されます。

#include <iostream>
using namespace std;


int main()
{
    int p;
    int s;

    cout << "Input price: ";
    cin  >> p;
    cout << "Input size: ";
    cin  >> s;

switch (s)
{
case 'XL': case 'xl':
    {
        if (p>500){
            cout << "Total price: " << p-100 << " pesos.";
            break;
        }
        else if ((s=='XL' || s=='xl') && (p<500)){
            cout << "Total price: " << p << " pesos.";
            break;
        }
    }
case 'L': case 'l':
    {
        if (p>600){
            cout << "Total price: " << p-50 << " pesos.";
            break;
        }
        else if ((s=='XL' || s=='xl') && (p<600)){
            cout << "Total price: " << p << " pesos.";
            break;
        }
    }
case 'M': case 'm':
    {
        cout << "Total price: " << p << " pesos.";
        break;
    }
case 'S': case 's':
    {
        cout << "Total price: " << p << " pesos.";
        break;
    }
}

return 0;

}

プログラムの出力:

Input price: 500
Input size: XL

Process returned 0 (0x0)   execution time : 5.750 s
Press any key to continue.

P.S.プログラムで警告(複数文字の文字定数)を削除するにはどうすればよいですか?前もって感謝します!

5
Jemar Villareal

サイズが複数の文字になる可能性がある場合は、文字列で表す必要があります。文字列に対してswitchを実行することはできないため、値を処理するにはif..else..else..を使用する必要があります。

std::string size;
cin >> size;
if (size == "XL") {
    // deal with size XL
} else if (size == "L") {
    // deal with size L
} // and so on

単一の文字の場合は、charnotint)を使用して次のことを表すことができます。

char size;
cin >> size;
switch (size) {
    case 'L': 
        // deal with size L
        break;
    // and so on
}

ただし、複数の文字の場合は、文字列が必要になります。

5
Mike Seymour

switchステートメントは、C++でintcharを処理できます。 charデータ型は1文字しか保持できません。したがって、XLサイズに1文字(X)だけを入力すると、問題ありません...

cout << "Input size (X/L/M/S): ";
cin  >> s;

switch (s){
    case 'X': case 'x':
1
Tun Zarni Kyaw

sを整数として宣言しましたが、それを文字および文字配列として使用しようとしました。おそらくそれが_char s;_であると宣言し、それを単一の文字として一貫して使用する必要があります。つまり、XLをチェックすることはできません。ただし、スイッチでXを確認することもできます。

どうしてもXLをチェックする必要がある場合は、文字配列または_std::string_のいずれかを使用する必要がありますが、switchステートメントは単一の文字でのみ使用できるため、複数の文字をチェックするためにスイッチをネストする必要がある場合がありますまたは、一連のif (strncmp(...)...)呼び出しを使用します。

0
patrickvacek