Switch case mehrfach prüfen

Gast #3926893
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.
Gast #3926939
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
}
#3926960
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.
Gast #3926982
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!
#3926994
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren