如何防止在 switch 语句中多次选择同一选项/值
How to prevent the same option/value from being selected multiple times in a switch statement
我正在使用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 语句。
但是,从长远来看,使用开关外壳以外的结构可能会使您的生活更轻松。
相关文章:
- 两个函数模板候选项.将一个参数作为引用后,选择不太专业的模板
- 如何在 DirectX 11 应用程序中提供选择图形适配器的选项?
- 我如何在Qt中选择构建选项
- 如何防止在 switch 语句中多次选择同一选项/值
- 是/否总是选择第一个选项(C )
- 如何确定函数的返回值在编译时选择可能的选项
- 如何防止用户多次选择一个选项
- 在菜单前键入字符串后,C 如何从菜单中选择选项
- 如何在选择错误选项时保持程序运行而不退出
- 正在更新选项卡选择的CPropertyPage
- 选择哪个选项在C++中使用sql
- IFstream在选择菜单选项后无法打开文件
- Scons 选择哪个版本的 g++ |无法识别的命令行选项"-std=c++11"
- 在双括号 QString 之间仅选择一个选项
- 在提升构建中根据操作系统选择编译器选项
- 当选择一个选项时,如何执行另一个c++程序
- C 使用 Y/N 选项循环开关。选择 N 不会关闭程序
- 根据第一个选项选择选项组
- 仅为QFileSystemModel的第一列(驱动器、文件夹、文件)选择选项
- 如何禁用CListCtrl选择选项