Forum: Compiler & IDEs Fehler bei "Case"


von MartinU (Gast)


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

von johnny.m (Gast)


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").

von arc (Gast)


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;
}

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.