Переключить регистр с логическим оператором в C
Я новичок в C и нуждаюсь в помощи. Мой код следующий.
#include<stdio.h>
#include<conio.h>
void main()
{
int suite=2;
switch(suite)
{
case 1||2:
printf("hi");
case 3:
printf("byee");
default:
printf("hello");
}
printf("I thought somebody");
getche();
}
Я работаю в Turbo C и вывод helloI thought somebody
, Там нет сообщения об ошибке.
Пожалуйста, дайте мне знать, как это работает.
6 ответов
case 1||2:
становится true
, так становится case 1:
но переданное значение равно 2. поэтому выполняется случай по умолчанию. После этого ваш printf("I thought somebody");
казнены.
Сделай это:
switch(suite){
case 1:/*fall through*/
case 2:
printf("Hi");
...
}
Это будет намного более чистый способ сделать это. Выражение 1||2
оценивает 1
, поскольку suite
был 2, он не будет соответствовать ни 1, ни 3, и перейти к default
дело.
case 1||2:
Результаты в
case 1:
так как 1 || 2
оценивает 1
(и помните, только постоянные интегральные выражения допускаются в case
операторы, поэтому вы не можете проверить несколько значений в одном case
).
Вы хотите использовать:
case 1:
// fallthrough
case 2:
Вы switch
по стоимости 2
, который соответствует default
дело в switch
заявление, поэтому он печатает "привет", а затем последняя строка печатает "Я думал, что кто-то".
Имейте в виду, что операторы switch в C сравнивают ваш входной аргумент с каждым указанным случаем и вводят переключатель из этого случая. Затем он продолжает работать, пока не встретит оператор break, который не включен в ваш фрагмент кода.У меня такое ощущение, что с приведенным ниже кодом и вводом 2 вы ожидали увидеть вывод вроде «привет, я подумал, кто-то»:
switch(suite)
{
case 1||2:
printf("hi");
case 3:
printf("byee");
default:
printf("hello");
}
Отложив вопрос о логическом операторе в сторону (много хороших ответов на этот вопрос выше), даже если этот код введет переключатель в случае 1||2, ваш результат будет «hibyeehello, я думал, кто-то». Чтобы исправить это, просто добавляйте паузу в конце каждого случая, когда вы ожидаете, что ваш код что-то сделает:
switch(suite)
{
case 1:
//fallthrough
case 2:
printf("hi");
break;
case 3:
printf("byee");
break;
default:
printf("hello");
break;
}
case (1||2):
printf("hi");
Просто поставьте скобки и увидите магию.
В вашем коде программа просто проверяет первое значение и выключается. Так как она не находит 2, после этого она переходит в регистр по умолчанию.
Но если вы укажете, что оба термина, то есть 1 и 2, взяты вместе, используя скобки, все будет работать так, как вам нужно.