如何防止在 switch 语句中多次选择同一选项/值

How to prevent the same option/value from being selected multiple times in a switch statement

本文关键字:选择 选项 何防止 switch 语句      更新时间:2023-10-16

我正在使用C++为项目创建一个菜单。在项目的特定部分,我正在使用 switch 语句来允许用户在该菜单中的不同选项之间进行选择。问题是目前允许他们多次选择相同的选项。由于每个选项都有一个特定的值,因此它会在该选项的值上添加与用户选择该选项相同的次数。我想将用户可以选择任何选项的次数限制为一次。

编辑:我不允许在此项目中使用数组。

void additionalOptionsMenu();
const double VIEW = 50.00;
const double JACUZZI = 40.00;
const double BREAKFAST = 15.00;
const double BED = 12.00;
const double WIFI = 9.00;
int main()
{
    double additionalOptions = 0.00;
    int subChoice;

    do{
           additionalOptionsMenu();
    cin >> subChoice;
        switch (subChoice){
            case 1:
                additionalOptions += VIEW;
                break;
            case 2:
                additionalOptions += JACUZZI;
                break;
            case 3:
                additionalOptions += BREAKFAST;
                break;
            case 4:
                additionalOptions += BED;
                break;
            case 5:
                additionalOptions += WIFI;
                break;
            case 6:
                break;
            default:
                cout << "ERROR";
                break;

        }
        }while (subChoice != 6);
        cout << additionalOptions; 
//Displays the final value of additionalOptions
    return 0;
}

void additionalOptionsMenu()
{
    cout << "n1. View: $50.00n"
         << "n2. Jacuzzi: $40.00n"
         << "n3. Breakfast: $15.00n"
         << "n4. Extra Bed: $12.00n"
         << "n5. Internet Access: $9.00n"
         << "n6. Previous Menun";
}

最简单的方法是有一个布尔数组,您可以跟踪用户已经选择的内容:

void additionalOptionsMenu();
const double VIEW = 50.0;
const double JACUZZI = 40.0;
const double BREAKFAST = 15.0;
const double BED = 12.0;
const double WIFI = 9.0;
enum AmenitysOption {
    , AMENITY_NONE
    , AMENITY_VIEW
    , AMENITY_JACUZZI
    , AMENITY_BREAKFAST
    , AMENITY_BED
    , AMENITY_WIFI
    , AMENITY_MAX
};
bool amenityOptions[AMENITY_MAX] = {};
int main()
{
    double additionalOptions = 0.0;
    int subChoice;
    do {
        additionalOptionsMenu();
        cin >> subChoice;
        if(amenityOptions[subChoice]) {
            cout << "nYou've already picked that option.n";
            continue;
        }
        switch (subChoice) {
            case AMENITY_NONE:
                break;
            case AMENITY_VIEW:
                additionalOptions += VIEW;
                amenityOptions[AMENITY_VIEW] = true;
                break;
            case AMENITY_JACUZZI:
                additionalOptions += JACUZZI;
                amenityOptions[AMENITY_JACUZZI] = true;
                break;
            case AMENITY_BREAKFAST:
                additionalOptions += BREAKFAST;
                amenityOptions[AMENITY_BREAKFAST] = true;
                break;
            case AMENITY_BED:
                additionalOptions += BED;
                amenityOptions[AMENITY_BED] = true;
                break;
            case AMENITY_WIFI:
                additionalOptions += WIFI;
                amenityOptions[AMENITY_WIFI] = true;
                break;
            case AMENITY_MAX:
                break;
            default:
                cout << "nERROR";
                break;
        }
    } while (subChoice < AMENITY_MAX);
    cout << additionalOptions; 
    //Displays the final value of additionalOptions
    return 0;
}

void additionalOptionsMenu()
{
    cout << "n1. View: $50.00n"
         << "n2. Jacuzzi: $40.00n"
         << "n3. Breakfast: $15.00n"
         << "n4. Extra Bed: $12.00n"
         << "n5. Internet Access: $9.00n"
         << "n6. Previous Menun";
}

您不会在基本开关机箱中找到该功能。使用变量将该功能添加到 switch 语句中以检查是否已使用选项将起作用。为此,请在 += 代码行周围添加 if 语句。

但是,从长远来看,使用开关外壳以外的结构可能会使您的生活更轻松。