Как конвертировать, если переключить регистр в c - PullRequest
2 голосов
/ 22 марта 2019
if(a > b)
{printf("%d is greater than %d", a, b);}
else if( a < b )
{printf("%d is greater than %d", b, a);}
else
{printf("%d is equal to %d", a, b);}

Как преобразовать оператор if в switch-case в C?Я пытаюсь, но я не знаю ответа на эту проблему

Ответы [ 4 ]

7 голосов
/ 22 марта 2019

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

Вы пытаетесь сравнить две переменные.Это не вариант использования для switch.

Ваша цепь if / else if в порядке.

5 голосов
/ 22 марта 2019
switch ((a < b) - (a > b)) {
case -1:
    printf("%d is greater than %d", a, b);
    break;
case 1:
    printf("%d is greater than %d", b, a);
    break;
default:
    printf("%d is equal to %d", a, b);
}
2 голосов
/ 22 марта 2019

шутка :

switch ((a > b) ? 1 : ((a == b) ? 0 : -1)) {
case 1:
  printf("%d is greater than %d", a, b);
  break;
case 0:
  printf("%d is equal to %d", a, b);
  break;
default:
  printf("%d is greater than %d", b, a);
}
1 голос
/ 22 марта 2019

Вы наткнулись на трехстороннее сравнение здесь.

Вы можете написать switch ((a < b) - (a > b)) { с -1, 0 и +1 в качестве меток регистра для a < b, a == b и a > b соответственно. Обратите внимание, что вам нужны скобки, так как двоичный файл - имеет более высокий приоритет, чем < или >.

В C ++ это выражение было инкапсулировано в трехсторонний оператор сравнения <=>, и вы можете написать просто

switch (a <=> b){

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

...