Я немного запутался, как вы хотите это сделать - особенно, если вы хотите, чтобы пользователь вводил «3» или если вы хотите, чтобы они вводили «Целый цыпленок». Если вы хотите сравнить строки, вы можете использовать карту, хотя это может не дать вам именно то, что вы хотите здесь, с учетом вложенного взаимодействия CLI. Но вот как это может выглядеть:
#include <map>
unordered_map<string, int> validEntrees = {
"Chicken Wings": 1,
"Chicken Breast": 2,
"Whole Chicken": 3,
// ...snip...
"Brisket": 11,
"Prime Rib Roast": 12,
}; // I'm not sure what the proper "value" type is. Using an int here, but a function might actually produce cleaner code.
string meat;
cout << "This program will blah blah blah...\n" // rest of the preamble
cout << "You can select any of the following to make today: \n";
for (auto key : validEntrees ) {
cout << key << endl;
}
cout << "Your selection: ";
cin >> meat;
switch(validEntrees[meat]) {
case 1: // Chicken Wings
//... you get the idea
break;
}
В зависимости от того, что вы хотите, это может сработать лучше, чем «нажмите 1 для куриных крылышек». Это, по сути, обходится без специального c оператора if / switch. Но теперь вам нужно беспокоиться о том, что пользователь предоставит что-то за пределами ожидаемых значений (хотя, честно говоря, вам всегда приходилось это делать).
Кроме того, если вас устраивает «нажмите 1 for ... ", то вы все равно можете рассмотреть возможность использования карты для возврата текстовых значений. В этом случае ключ и значения будут поменяны местами:
unordered_map<int, string> entreeSelectionToName = {
1: "Chicken Wings",
}
cout << entreeSelectionToName[1] << endl; // should print "Chicken Wings"
Честно говоря, хотя есть вещи, которые я бы изменил в вашем решении (в частности: больше функций, описаний, связанных вместе), базовый c переключателя, вероятно, будет достаточно, если я не хочу особо фантазировать.