Оператор переключения с использованием или

Я с Andrew Rollings.

Теперь Вы могли обсудить эффективность пространства. Интервал что, 8 байтов макс.? Гуид идет в намного дольше.

, Но у меня есть две главных причины для предпочтения: удобочитаемость и время доступа. Числа легче для меня, чем GUID (так как я могу всегда находить следующую/предыдущую запись легко).

Что касается времени доступа, обратите внимание, что некоторый DBS может начать иметь БОЛЬШИЕ проблемы с GUID. Я знаю дело обстоит так с MySQL ( MySQL InnoDB Primary Key Choice: GUID/UUID по сравнению с Целочисленной Производительностью Вставки ). Это не может быть большой частью проблемы с SQL Server, но это - что-то, чтобы не упустить.

я сказал бы что палка с INT или BIGINT. Единственное время я думал бы, что Вы захотите GUID, - когда Вы собираетесь выделить их и не хотите, чтобы люди смогли предположить идентификаторы других записей из соображений безопасности.

25
задан Rodrigo de Azevedo 12 June 2018 в 12:36
поделиться

6 ответов

Таким образом:

 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

48
ответ дан 28 November 2019 в 17:55
поделиться

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

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

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

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

20
ответ дан 28 November 2019 в 17:55
поделиться

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

3
ответ дан 28 November 2019 в 17:55
поделиться

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

3
ответ дан 28 November 2019 в 17:55
поделиться

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

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

3
ответ дан 28 November 2019 в 17:55
поделиться
switch (toupper(choice))
{
  case 'Q':...
}

... или tolower.

2
ответ дан 28 November 2019 в 17:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: