Forum: Compiler & IDEs Switch case mehrfach prüfen


von michel angelo (Gast)


Lesenswert?

Hallo ich würde gerne mit Switch - case bei mehrfacher EIngabe ein- und 
dasselbe tun, also in etwa so:
1
unsigned char var_to_prove;
2
Switch(var_to_prove)
3
{
4
case 0b00000000 || case 0b00000001:
5
i++;
6
break;
7
case 0b00000010 || case 0b00000011:
8
i--;
9
break;
10
}

Je nachdem wir groß bzw. besser lang die Anweisungen sind wäre dies 
wünschenswert.

Wie realisiert man so etwas mit Switch case?
If- Verschachtelungen wären noch unübersichtlicher.

: Verschoben durch User
von JF (Gast)


Lesenswert?

So

unsigned char var_to_prove;
Switch(var_to_prove)
{
case 0b00000000:
case 0b00000001:
i++;
break;
case 0b00000010:
case 0b00000011:
i--;
break;
}

von michel angelo (Gast)


Lesenswert?

top, danke!

von Praktiker (Gast)


Lesenswert?

Bei diesem, möglicherweise ungünstig gewählten Beispiel, geht es 
natürlich auch ohne die Mehrfachzuordnung
1
unsigned char var_to_prove;
2
Switch(var_to_prove & 0xfe)
3
{
4
  case 0b00000000:
5
  i++;
6
  break;
7
  case 0b00000010:
8
  i--;
9
  break;
10
}

von Udo S. (urschmitt)


Lesenswert?

michel angelo schrieb:
> Switch

so lässt sich das Beispiel bestimmt nicht compilieren.
Um zu verstehen wie ein switch case funktioniert solltest du in dein C 
Buch schauen, sonst dauert es genau 1 Stunde vor dem Computer bis die 
nächste Frage wegen eines vergessenen 'break' kommt.

von michel angelo (Gast)


Lesenswert?

Udo Schmitt schrieb:

> nächste Frage wegen eines vergessenen 'break' kommt.

???

von Karl H. (kbuchegg)


Lesenswert?

michel angelo schrieb:
> Udo Schmitt schrieb:
>
>> nächste Frage wegen eines vergessenen 'break' kommt.
>
> ???

weil der springende Punkt das weglassen des break ist. Man nennt das 
einen 'Fall-Through' (also ein Durchfallen von einem case zum nächsten)
1
  switch( irgendwas ) {
2
3
    case 1:
4
      i = i + 2;
5
      // Fallthrough
6
7
    case 2:
8
      i = i - 1;
9
      PORTA = i;
10
      break;
11
12
    case 3:
13
      i = 0;
14
      PORTA = i;
15
  }

wenn irgendwas zu 1 evaluiert, werden die Anweisungen unter 'case 1:' 
ausgeführt. Da dort aber kein break steht, fällt die Programmausführung 
durch zum Code der unter 'case 2: steht. Und erst dessen break schiesst 
dann die Programmausfhrung aus dem switch raus.

Und ja. Das könnte man in jedem C Buch nachlesen, wenn man eines hätte. 
So wie noch 100-erte andere Dinge, die man als C Programmierer wissen 
muss.

: Bearbeitet durch User
von michel angelo (Gast)


Lesenswert?

Ähm ich weiss was ein Break ist und habe diese in meinem obigen Beispiel 
mit drin. Ich vermute mal stark, dass Herr Schmitt dies übersehen hat. 
Wahrscheinlich noch Jemand der den ganzen Tag Kommentare durchliest und 
darauf hofft, dass Jemand einen Fehler macht...


Gott sei Dank sind hier nicht alle So!

von Karl H. (kbuchegg)


Lesenswert?

michel angelo schrieb:
> Ähm ich weiss was ein Break ist und habe diese in meinem obigen Beispiel
> mit drin.

Es geht nicht darum, dass du einen break drinnen hast. Es geht darum, 
was ein absichtliches Weglassen des break bewirkt.

ein
1
  switch(var_to_prove)
2
  {
3
    case 0b00000000:
4
5
    case 0b00000001:
6
      i++;
7
      break;
8
9
    case 0b00000010:
10
11
    case 0b00000011:
12
      i--;
13
      break;
14
  }

ist nichts anderes als ein Fallthrough vom Fall 0b00000000 in den Fall 
0b00000001, indem beim ersten case, der break weggelassen wurde, was 
effektiv (da es keinen Code unter dem case 0b00000000 gibt) in einer 
Oder-Verknüpfung der beiden Fälle mündet.

: Bearbeitet durch User
von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Karl Heinz schrieb:
> Man nennt das
> einen 'Fall-Through' (also ein Durchfallen von einem case zum nächsten)
>
>   switch( irgendwas ) {
>     case 1:
>       i = i + 2;
>       // Fallthrough

wobei das mit Abstand wichtigste an dem Konstrukt das
1
// Fallthrough
ist. Nämlich das Kommentar.

von Tom Duff (Gast)


Lesenswert?

Karl Heinz schrieb:
> Es geht nicht darum, dass du einen break drinnen hast. Es geht darum,
> was ein absichtliches Weglassen des break bewirkt.

Genau, darum geht es.

T.D.

von Eric B. (beric)


Lesenswert?

Karl Heinz schrieb:
> Und ja. Das könnte man in jedem C Buch nachlesen, wenn man eines hätte.

Und das hat jeder! z.B. http://www.cprogramming.com/ oder 
https://www.google.de/#q=C+tutorial

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.