Вопрос

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

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

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

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

Это было полезно?

Решение

Сюда:

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

Подробнее по этой теме:http://en.wikipedia.org/wiki/switch_statement#c.2c_c.2b.2b.2c_java.2c_php.2c_actionscript.2c_javascript

Другие советы

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

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

т.е. из -за отсутствия break, программа выполнения каскады в следующий блок. Это часто называют «провалиться».

Тем не менее, вы, конечно, могли бы просто нормализовать случай переменной «Menuchoice» в этом случае через Toupper/Tolower.

Просто используйте 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(), с капиталом и не капиталскими буквами.

Вы можете (и по причинам восстановления, должны) перед введением оператора Switch использовать TOLOWER FNC на вашем VAR.

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

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

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

... или толаул.

Если вы это сделаете

case('s' || 'S'):
    // some code
default:
    // some code

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

case 's':
case 'S':
    // some code

или же

switch(toupper(choice){
    case 'S':
        // some code.

toupper Вам нужно будет включить ctype.h.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top