Switch case with logical operator in C

2019-02-22 02:22发布

I am new to C and need help. My code is the following.

 #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();
  }

I am working in Turbo C and the output is helloI thought somebody. There's no error message.

Please, let me know how this is working.

5条回答
何必那么认真
2楼-- · 2019-02-22 02:42

do this:

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

This will be a lot cleaner way to do that. The expression 1||2 evaluates to 1, since suite was 2, it will neither match 1 nor 3, and jump to default case.

查看更多
干净又极端
3楼-- · 2019-02-22 02:42

You switch on value 2, which matches default case in switch statement, so it prints "hello" and then the last line prints "I thought somebody".

查看更多
手持菜刀,她持情操
4楼-- · 2019-02-22 03:00
case 1||2:

Becomes true. so it becomes case 1: but the passed value is 2. so default case executed. After that your printf("I thought somebody"); executed.

查看更多
贼婆χ
5楼-- · 2019-02-22 03:01
case (1||2):
  printf("hi");

Just put brackets and see the magic.

In your code,the program just check the first value and goes down.Since,it doesn't find 2 afterwards it goes to default case.

But when you specific that both terms i.e. 1 and 2 are together, using brackets, it runs as wished.

查看更多
倾城 Initia
6楼-- · 2019-02-22 03:05
case 1||2:

Results in

case 1:

because 1 || 2 evaluates to 1 (and remember; only constant integral expressions are allowed in case statements, so you cannot check for multiple values in one case).

You want to use:

case 1:
  // fallthrough
case 2:
查看更多
登录 后发表回答