Действительно ли возможно сделать следующее в операторе переключения - C++?

Я - студент программирования в своем втором классе ООП, и у меня есть простой вопрос, на который я не был в состоянии найти ответ в Интернете, если это там, я приношу извинения.

Мой вопрос - это:

Это возможно, имеют булевы условия в операторах переключения?

Пример:

switch(userInputtedInt)
{
    case >= someNum && <= someOtherNum
    break;
    // Is this possible?
}
8
задан Alex 19 January 2010 в 16:11
поделиться

7 ответов

Нет, это невозможно в C ++. Выключатели коммутации поддерживают только целые числа и символы (они будут заменены их значениями ASCII) для совпадений. Если вам нужно сложное логическое состояние, то вы должны использовать блок IF / Evel

13
ответ дан 5 December 2019 в 05:26
поделиться

Нет, это обычно это обзор , если выбрано :

if ((userInputtedInt >= someNum) && (userInputtedInt <= someOtherNum)) { ... }

, конечно, вы можете включить в себя выключающее устройство :

switch (x) {
    case 1:
        // handle 1
        break;
    default:
        if ((x >= 2) && (x <= 20)) { ... }
}
-121--3448128-

Это невозможно напрямую - оператор коммутатора C или C ++ требует, чтобы каждый случай постоянна, а не булевое выражение. Если у вас равномерно распределенные диапазоны, вы часто можете получить тот же эффект, используя целочисленное разделение, хотя. например Если у вас есть входы от 1 до 100, и хотите работать с 90-100 в качестве одной группы, 80-89 в качестве другой группы, и т. Д., Вы можете разделить свой вход на 10, и каждый результат будет представлять диапазон.

-121--3448129-

Как и другие, вы не можете реализовать это напрямую , так как вы пытаетесь сделать, потому что синтаксис C ++ не позволяет ему. Но вы можете сделать это:

switch( userInputtedInt )
{
  // case 0-3 inclusve
  case 0 :
  case 1 :
  case 2 :
  case 3 :
    // do something for cases 0, 1, 2 & 3
    break;

  case 4 :
  case 5 :
    // do something for cases 4 & 5
    break;
}
7
ответ дан 5 December 2019 в 05:26
поделиться

Это невозможно. Самое близкое, что вы можете немного, если значения достаточно близки друг к другу, это

switch(userInputtedInt)
{
    case someNum:
    case someNum+1:
    // ... 
    case someOtherNum:
    break;

}
0
ответ дан 5 December 2019 в 05:26
поделиться

Для затмения я использую следующее: window - > preferences - > java - > editor - > save action - > установите флажок для организации импорта (там также есть много других полезных вещей, таких как форматирование, завершение полей и т. д.). Поэтому, когда я сохраняю мой файл затмение удаляет неэссенциальный импорт для меня. На мой взгляд, если вам что-то не нужно, то уберите его (или пусть уберут затмением).

-121--746370-

Это может быть так же просто, как вы забываете избежать обратной косой черты. Вместо

bmp.LoadBitmap("c:\aeimg");

используйте

bmp.LoadBitmap("c:\\aeimg");

В противном случае передается недопустимый путь к методу LoadBitmap.

-121--3294870-

C++ не поддерживает это.

Однако, если вы не хотите писать портативный, стандартный код некоторые компиляторы поддерживают этот расширенный синтаксис:

switch(userInputtedInt)
{
    case someNum...someOtherNum:
    break;
}

Эти значения должны быть постоянными.

0
ответ дан 5 December 2019 в 05:26
поделиться

Silverlight или WPF, если требуется дополнительная мощность. Обе модели имеют схожую модель программирования (с XAML и кодовым отставанием), так что вы можете начать с Silverlight и при необходимости перейти на WPF.

-121--4631907-

Это настольное приложение? Если так, я бы использовал WPF. Silverlight является подмножеством WPF, поэтому с помощью WPF можно потенциально сделать больше.

-121--4631906-

Если вам нужен препроцессор, вы можете написать какой-нибудь макрос, который автоматически расширится до требуемого количества инструкций case. Однако это потребовало бы длинного файла с практически всеми утверждениями (например, # define CASE0 case 0: # define CASE1 case 1:...)

Вы не должны идти туда, но это весело сделать... для удовольствия!;)

0
ответ дан 5 December 2019 в 05:26
поделиться

Нет, это обычно является обзором , если выбрано :

if ((userInputtedInt >= someNum) && (userInputtedInt <= someOtherNum)) { ... }

, конечно, вы можете включить в действие выключатель :

switch (x) {
    case 1:
        // handle 1
        break;
    default:
        if ((x >= 2) && (x <= 20)) { ... }
}
7
ответ дан 5 December 2019 в 05:26
поделиться

Нет, это, как правило, это обычно обзор , если утверждение:

if ((userInputtedInt >= someNum) && (userInputtedInt <= someOtherNum)) { ... }

, конечно, вы можете включить в действие выключатель :

switch (x) {
    case 1:
        // handle 1
        break;
    default:
        if ((x >= 2) && (x <= 20)) { ... }
}
-121--3448128-

Это невозможно напрямую - оператор коммутатора C или C ++ требует, чтобы каждый случай постоянна, а не булевое выражение. Если у вас равномерно распределенные диапазоны, вы часто можете получить тот же эффект, используя целочисленное разделение, хотя. например Если у вас есть входы от 1 до 100, и хотите работать с 90-100 в качестве одной группы, 80-89 в качестве другой группы, и т. Д., Вы можете разделить свой вход на 10, и каждый результат будет представлять диапазон.

3
ответ дан 5 December 2019 в 05:26
поделиться
Другие вопросы по тегам:

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