Switch case with logical operator in C

谁都会走 提交于 2019-12-19 18:59:34

问题


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.


回答1:


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.




回答2:


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:


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:



回答4:


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".




回答5:


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.



来源:https://stackoverflow.com/questions/13226124/switch-case-with-logical-operator-in-c

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!