Вопрос по c, or-operator, switch-statement – Переключить регистр с логическим оператором в C

6

Я новичок в C и нуждаюсь в помощи. Мой код следующий.

 #include  
 #include  
 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, Там'Нет сообщения об ошибке.

Пожалуйста, дайте мне знать, как это работает.

Вы должны встретиться с моими друзьями: Enter и пробел. Они действительно великолепны и могут сделать ваш код тоже великолепным, если вы их хорошо спросите. Jeff Mercado
хорошо, я буду реализовывать это спасибо. Er Avinash Singh
@ErAvinashSingh у вас есть выбор, вы можете использовать GCC на окнах с MinGW или Cygwin Aniket Inge

Ваш Ответ

5   ответов
2
case 1||2:

Результаты в

case 1:

так как1 || 2 оценивает1 (и помните, только постоянные интегральные выражения допускаются вcase операторы, поэтому вы не можете проверить несколько значений в одномcase).

Вы хотите использовать:

case 1:
  // fallthrough
case 2:
@JeremyJStarcher: я нене хочу сказать, что это неt (и я показал, к чему это сводится в моем первом примере), я подумал, что ОП хотел один и тот же случай для 1 и 2. Однако, читая его еще раз, я определенно сформулировал это в замешательстве. Я'исправлю, спасибо. Ed S.
1||2 постоянная В какой-то момент компилятор уменьшил бы это значение. Скорее всего при разборе времени. Jeremy J Starcher
NP. Я знаю, мне нравится, когда люди ужесточают мою формулировку. Jeremy J Starcher
6

сделай это:

switch(suite){
  case 1:/*fall through*/
  case 2: 
    printf("Hi");
...
}

Это будет намного более чистый способ сделать это. Выражение1||2 оценивает1, посколькуsuite был 2, он не будет ни соответствовать ни 1, ни 3, и перейти кdefault дело.

Oни'разрешено ... только что выигралне работает, как он мог ожидать. Jeff Mercado
@JeffMercado: - Да, ты прав. Я тоже получил то же самое. Спасибо Er Avinash Singh
@JeffMercado спасибо, я мог бы посмотреть, как они работают. Человек 8 лет с C и кое-что из этого все еще возвращается и обучает меня Aniket Inge
ах да @DaoWen я проверил с моим компилятором. 1 || 2 оценивается как 1, что верно. А также... Aniket Inge
Аникет - С тех порнет логического типа в C (онипросто целые) компилятор будет делать постоянное сворачивание на1||2как это было бы на0+1и вы в конечном итогеcase 1 а не1 или 2 что пользователь может ожидать, если онипроисходит от языка с полным сопоставлением с альтернативами. DaoWen
13
case 1||2:

true, так case 1: но переданное значение равно 2., поэтому выполняется случай по умолчанию. После этого вашprintf("I thought somebody"); казнены.

+1 за объяснение, почему код ОП не действовал так, как он ожидал. Jeremy J Starcher
рад, что ты понял .... Jeyaram
ну да, я думал, что это работает как EITOR 1 или 2 дело .. но кажется, что это работает иначе Er Avinash Singh
0

switch по стоимости2, который соответствуетdefault дело вswitch Заявление, так что печатаетПривет" а потом последняя строка печатаетЯ думал, что кто-то ".

-1
case (1||2):
  printf("hi");

В вашем коде программа просто проверяет первое значение и выключается. Так какне найти 2 после этого идет к случаю по умолчанию.

Но если вы укажете, что оба термина, то есть 1 и 2, взяты вместе, используя скобки, все будет работать так, как вам нужно.

Я сомневаюсь, что это работает. Какой компилятор вы используете? Fabio Turati
Я попробовал это в GCC. Оно работает. Harpreet Vishnoi

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