Fehler bei "Case"

Gast #367978
Lesenswert?
• ▲
▼
Hallo,
ich bekomme bei diesem Code
1
void write_number(uint8_t zahl)
2
{
3
 switch(zahl) {
4
 
5
  case (zahl >= 100): 
6
   { PORTD = 0b00000001;
7
     write_ziffer((zahl - 100)/100);
8
     PORTB |= 0b11001111;
9
   PORTD = 0b00000010;
10
   write_ziffer(fmod(zahl,10));
11
   }
12
   break;
13
   
14
  case (zahl >=10 && zahl < 100):
15
   { PORTD = 0b00000001;
16
     write_ziffer(zahl/10);
17
   PORTD = 0b00000010;
18
   write_ziffer(fmod(zahl,10));
19
   }
20
   break;
21
   
22
  case (zahl < 10):
23
   { PORTD = 0b00000010;
24
     write_ziffer(zahl);
25
   }
26
   break;
27
  } 
28
}

folgende Fehlermeldung:
neu.c:156: error: case label does not reduce to an integer constant

Habt ihr einen Tip, wie ich den Fehler wegbekomme, ohne großartige
if-Konstrukte einsetzen zu müssen?

Gruß
Martin
Gast #367979
Lesenswert?
• ▲
▼
Hast Du ein C-Buch? Dann schau da mal rein. Da steht nämlich
wahrscheinlich drin, wie eine switch-case-Anweisung syntaktisch
aussieht. Kleiner Tip: Das was Du machen willst, geht mit einer
switch-case-Anweisung so nicht. Da wirst Du wohl ein if-else if Bemühen
müssen. switch sieht so aus:

switch(zahl)
{
    case 10 : dosomething;
              break;
    case 100: dosomethingelse;
              break;
    default : donothing;
              break;
}

In den case-Ausdrücken dürfen keine Operationen durchgeführt werden,
sondern nur Ausdrücke, "die sich zu einer ganzzahligen Konstante
reduzieren" ("reduce to an integer constant").
Gast #367980
Lesenswert?
• ▲
▼
Wenn man nicht auf Portabilität zwischen verschiedenen Compilern achten
will, kann man beim gcc auch "case ranges" verwenden...

switch (zahl) {
  case 0 ... 9:
    break;
  case 10 ... 99:
    break;
  default:
    break;
}

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.