# Switch

Hi!

I checked about the [b]switch[/b] logic.
Doesn't seem like it allows you to initialise like this?

[code]
case '0-39': 20
case '40-79': 40
[/code]

Meaning, if the value passed was 0 to 39 (e.g 1 or 20 or 38), then assign [b]20[/b].

Is [b]switch[/b] for only single-value evaluation?
For example,

[code]
case 'A': 20 //If the value is 'A', then assign 20
case 'B': 40 //If the value is 'B', then assign 40
[/code]

Thanks!!

• : Hi!
:
: I checked about the [b]switch[/b] logic.
: Doesn't seem like it allows you to initialise like this?
:
: [code]
: case '0-39': 20
: case '40-79': 40
: [/code]
:
: Meaning, if the value passed was 0 to 39 (e.g 1 or 20 or 38), then assign [b]20[/b].

[blue]No, that is not valid in C/C++.
You would need to use a bunch of if-else statements.
[/blue]

:
: Is [b]switch[/b] for only single-value evaluation?
: For example,
:
: [code]
: case 'A': 20 //If the value is 'A', then assign 20
: case 'B': 40 //If the value is 'B', then assign 40
: [/code]
:
:
: Thanks!!
:

[blue]No, that is not valid either.

Do something like this:

[code]
switch(ch)
{
case 'A':
ch = 20;
break;

case 'B':
ch = 40;
break;

case 'C':
case 'D':
ch = 50;
break;

default:
ch = 0;
}
[/code]

[/blue]

• : [code]
: case '0-4': 3
: case '5-9': 8
: [/code]
For your example it would be easier to use:
[code]
int x;
if(x >= 0 && x <= 4) {
x = 3;
}
int y;
if(y >= 5 && y <= 9) {
y = 8;
}
[/code]

I think the previous way is easier to understand, but can also be accomplished by the following:
[code]
int x;
switch(x) {
case 0:
case 1:
case 2:
case 3:
case 4:
x = 4;
break;
default:
// what happens if value is not matched?
}
int y;
switch(y) {
case 5:
case 6:
case 7:
case 8:
case 9:
y = 8;
break;
default:
// what happens if value is not matched?
}
[/code]
:
: [code]
: case 'A': 20 //If the value is 'A', then assign 20
: case 'B': 40 //If the value is 'B', then assign 40
: [/code]
:
Some newer compilers like C# support this without any problem. There is a work around for older compilers, but it is uglier then a bunch of nested if()else statements.
• : [code]
: int x;
: switch(x) {
: case 0:
: case 1:
: case 2:
: case 3:
: case 4:
: x = 4;
: break;
: default:
: // what happens if value is not matched?
: }
: int y;
: switch(y) {
: case 5:
: case 6:
: case 7:
: case 8:
: case 9:
: y = 8;
: break;
: default:
: // what happens if value is not matched?
: }
: [/code]

[blue]Not that the above will be very slow compared to if-statements.[/blue]

: :
: : [code]
: : case 'A': 20 //If the value is 'A', then assign 20
: : case 'B': 40 //If the value is 'B', then assign 40
: : [/code]
: :
: Some newer compilers like C# support this without any problem. There is a work around for older compilers, but it is uglier then a bunch of nested if()else statements.

[blue]Err... C# is not a "newer compiler", it is a totally different language. It is not valid syntax in C/C++.[/blue]

• : : [code]
: : int x;
: : switch(x) {
: : case 0:
: : case 1:
: : case 2:
: : case 3:
: : case 4:
: : x = 4;
: : break;
: : default:
: : // what happens if value is not matched?
: : }
: : int y;
: : switch(y) {
: : case 5:
: : case 6:
: : case 7:
: : case 8:
: : case 9:
: : y = 8;
: : break;
: : default:
: : // what happens if value is not matched?
: : }
: : [/code]
:
: [blue]Not that the above will be very slow compared to if-statements.[/blue]
:
:
: : :
: : : [code]
: : : case 'A': 20 //If the value is 'A', then assign 20
: : : case 'B': 40 //If the value is 'B', then assign 40
: : : [/code]
: : :
: : Some newer compilers like C# support this without any problem. There is a work around for older compilers, but it is uglier then a bunch of nested if()else statements.
:
: [blue]Err... C# is not a "newer compiler", it is a totally different language. It is not valid syntax in C/C++.[/blue]
:
C# doesn't support this either.

Greets,
Eric Goldstein
http://www.gvh-maatwerk.nl/english/E_index.htm

• You *might* be able to use something like result = (test_val < 40 ? 20 : test_val < 80 ? 40 : default_value) depending on your need.

: Hi!
:
: I checked about the [b]switch[/b] logic.
: Doesn't seem like it allows you to initialise like this?
:
: [code]
: case '0-39': 20
: case '40-79': 40
: [/code]
:
: Meaning, if the value passed was 0 to 39 (e.g 1 or 20 or 38), then assign [b]20[/b].
:
: Is [b]switch[/b] for only single-value evaluation?
: For example,
:
: [code]
: case 'A': 20 //If the value is 'A', then assign 20
: case 'B': 40 //If the value is 'B', then assign 40
: [/code]
:
:
: Thanks!!
:

• :
: [blue]No, that is not valid either.
:
: Do something like this:
:
: [code]
: switch(ch)
: {
: case 'A':
: ch = 20;
: break;
:
: case 'B':
: ch = 40;
: break;
:
: case 'C':
: case 'D':
: ch = 50;
: break;
:
: default:
: ch = 0;
: }
: [/code]
:
: [/blue]
:

Oh I see, that's right!
Thanks!!

Noted SIWTCH won't work for 0-30 kind of cases.

• : [/code]
:
: I think the previous way is easier to understand, but can also be accomplished by the following:
: [code]
: int x;
: switch(x) {
: case 0:
: case 1:
: case 2:
: case 3:
: case 4:
: x = 4;
: break;
: default:
: // what happens if value is not matched?
: }
: int y;
: switch(y) {
: case 5:
: case 6:
: case 7:
: case 8:
: case 9:
: y = 8;
: break;
: default:
: // what happens if value is not matched?
: }
: [/code]

Oh, this is GOOD!
Thanks for telling me this!
• : You *might* be able to use something like result = (test_val < 40 ? 20 : test_val < 80 ? 40 : default_value) depending on your need.
:
: : Hi!
: :
: : I checked about the [b]switch[/b] logic.
: : Doesn't seem like it allows you to initialise like this?
: :
: : [code]
: : case '0-39': 20
: : case '40-79': 40
: : [/code]
: :
: : Meaning, if the value passed was 0 to 39 (e.g 1 or 20 or 38), then assign [b]20[/b].
: :
: : Is [b]switch[/b] for only single-value evaluation?
: : For example,
: :
: : [code]
: : case 'A': 20 //If the value is 'A', then assign 20
: : case 'B': 40 //If the value is 'B', then assign 40
: : [/code]
: :
: :
: : Thanks!!
: :
:

I see, you mean use the function and its return value to valify the logic?