Подтвердить что ты не робот

Оператор switch - используя или?

Я создаю консольное приложение и использую оператор switch для создания простой системы меню. Пользователь вводится в виде одного символа, который отображается на экране как капитал. Тем не менее, я хочу, чтобы программа принимала символы нижнего и верхнего регистра.

Я понимаю, что переключатели используются для сравнения с константами, но можно ли сделать что-то вроде этого:

switch(menuChoice) {
    case ('q' || 'Q'):
        //Some code
        break;
    case ('s' || 'S'):
        //More code
        break;
    default:
        break;
}

Если это невозможно, есть ли работа, так как я действительно не хочу повторять код - такой короткий, как повторы.

4b9b3361

Ответ 2

Общепринятым синтаксисом для этого является:

switch(menuChoice) {
    case 'q':
    case 'Q':
        //Some code
        break;
    case 's':
    case 'S':
        //More code
        break;
    default:
        break;
}

i.e: Из-за отсутствия break выполнение программы каскадируется в следующий блок. Это часто называют "проваливанием".

Тем не менее, вы можете, конечно, просто нормализовать случай переменной "menuChoice" в этом случае через toupper/tolower.

Ответ 3

Просто используйте tolower(), здесь мой человек:

СИНТАКСИС
       #include ctype.h

   int toupper(int c);
   int tolower(int c);

ОПИСАНИЕ       toupper() преобразует букву c в верхний регистр, если это возможно.

   tolower() converts the letter c to lower case, if possible.

   If c is not an unsigned char value, or EOF, the behavior of these
   functions is undefined.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ       Возвращаемое значение - это преобразованная буква, или c, если преобразование было невозможно.

Итак, в вашем примере вы можете switch() с помощью:

switch(tolower(menuChoice)) {
    case('q'):
        // ...
        break;
    case('s'):
        // ...
        break;
}

Конечно, вы можете использовать как toupper(), так и tolower(), с заглавными и непрописными буквами.

Ответ 4

Вы можете (и по соображениям повторения), прежде чем вводить оператор switch, использовать tolower fnc на вашем var.

Ответ 5

'q' || 'Q' приводит к результату типа bool (true), который продвигается к интегральному типу, используемому в состоянии переключения (char), - давая значение 1. Если компилятор разрешил использовать одно значение (1) в нескольких меток, во время выполнения оператора switch menuChoice будет сравниваться со значением 1 в каждом случае. Если menuChoice имеет значение 1, тогда код под первой меткой case был бы выполнен.

Поэтому предлагаемые ответы здесь используют символьную константу (которая имеет тип char) как интегральное значение в каждой метке case.

Ответ 6

switch (toupper(choice))
{
  case 'Q':...
}

... или tolower.