问题
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