Пользователем вводятся два целочисленных числа. Нужно с помощью одного оператора
switch без использования оператора
if вывести на консоль соответствующее сообщение, что первое число больше второго, или второе число больше первого, или что оба числа равны между собой.
Даже опытному программисту не сразу же придет в голову, какое выражение использовать в
switch операторе.
Если написать прямолинейно, как, например,
switch ( num1 > num2 )
{
// ...
}
то выражение может принимать только два значения: 1 или 0. То есть мы сможем определить, что либо одно число больше другого, или что другое число не меньше первого числа.
Но можно написать выражение таким образом, что оно будет возвращать три значения, а не два аналогично тому, как это делают функции сравнения, используемые в качестве аргумента функции
qsort, или как это делает строковая функция
strcmp.
Ниже представлена демонстрационная программа.
#include <stdio.h>
int main(void)
{
int num1 = 0, num2 = 0;
printf( "Enter two numbers: " );
scanf( "%d %d", &num1, &num2 );
switch( ( num2 < num1 ) - ( num1 < num2 ) )
{
case -1:
printf( "The second number equal to %d is greater than "
"the first number equal to %d\n", num2, num1 );
break;
case 0:
printf( "The first number equal to %d is equal to "
"the second number equal to %d\n", num1, num2 );
break;
case 1:
printf( "The first number equal to %d is greater than "
"the secons number equal to %d\n", num1, num2 );
break;
}
return 0;
}
Выражение в
switch операторе либо будет равно 1, если первое число больше второго, либо 0, если оба числа равны между собой, либо -1, если первое число меньше второго.
Эта тема мною создана на основе вопроса на
Stackoverflow switch case to find maximum or equal in c isnt working Я считаю, что мое решение является лучшим из всех ответов на указанный вопрос, так как оно использует только один
switch оператор, что делает код более простым и ясным.