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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.