Оператор переключения с помощью или
-
11-10-2019 - |
Вопрос
Я создаю приложение для консоли и использую 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.hint 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
.