Программирование. Принципы и практика использования C++ Исправленное издание, стр. 49
int main(){ const double cm_per_inch = 2.54; // количество сантиметров // в дюйме double length = 1; // длина в дюймах или сантиметрах char unit = 'a'; cout<< "Пожалуйста, введите длину и единицу измерения (c или i):\n"; cin >> length >> unit; switch (unit) { case 'i': cout << length << " in == " << cm_per_inch*length << " cm\n"; break; case 'c': cout << length << " cm == " << length/cm_per_inch << " in\n"; break; default: cout << "Извините, я не знаю, что такое '" << unit << "'\n"; break; }}
switchifswitchcasecasecasebreakcasedefault4.4.1.3. Технические подробности инструкции switch
Здесь под техническими подробностями подразумеваются следующие детали, касающиеся инструкции
switch1. Значение, которое определяет выбор варианта, должно иметь тип
intcharenum2. Значения меток разделов
casecase3. Метки двух разделов
case4. Один раздел
case5. Не забывайте, что каждый раздел
casebreakРассмотрим пример.
int main() // переключение можно производить только по целым // числам и т.п.{ cout << "Вы любите рыбу?\n"; string s; cin >> s; switch (s) { // ошибка: значение должно иметь тип int, // char или enum case " нет ": // ... break; case " да ": // ... break; }}Для выбора альтернатив по строке следует использовать инструкцию
ifswitchifcaseint main() // метки разделов case должны быть константами{ // определяем альтернативы: int y = 'y'; // это может создать проблемы const char n = 'n'; const char m = '?'; cout << "Вы любите рыбу ?\n"; char a; cin >> a; switch (a) { case n: // ... break; case y: // ошибка: переменная метка раздела case // ... break; case m: // ... break; case 'n': // ошибка: дубликат метки раздела case // (значение метки n равно 'n') // ... break; default: // ...