Переключить регистр с логическим оператором в 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, взяты вместе, используя скобки, все будет работать так, как вам нужно.

Другие вопросы по тегам