Fallunterscheidung in switch/case

Ozzy Ozborn

Erfahrenes Mitglied
Moin,
ich habe ein kleines Problem, bei dem ich gerade nicht so recht weiterkomme: ich habe in meinem Programm eine switch/case Anweisung. Dabei sind aber einige case-Fälle doppelt belegt, jedoch sind diese abhängig von einem anderen Wert. z.B.:
Code:
switch(c)
   if (a==1) {
      case 0: tue was; break;
   }
   if (a==0) {
      case 0: tue etwas anderes; break;
   }
}
Das mag der Compiler aber so gar nicht (ducplicate case value). Aber wie muss es richig sein? Mit if-then-else würde man es ja hinbekommen, finde ich persönlich aber unschön... Geht es nur über #define, #undef?

MfG, und vielen Dank, Ozzy
 
Hi..

Ändere es doch mal so um:

Code:
switch(c)
	case 0:
		if (a==1) {
    			tue was; 
		} else if(a==0) {
			tue etwas anderes;
		}
		break;
}

MfG
Philipp
 
Moin,

danke für Deine schnelle Antwort. Die Lösung von Dir möchte ich auch gerne umgehen. Grund dafür ist, dass ich mir für die case-Fälle defines definiert habe, damit ich in dem Code nichts mehr ändern muss, wenn sich die Zeichen ändern...

MfG, Ozzy
 
Hmm.. Ich verstehe derzeit nicht, was du genau machen willst..

Was hast du mit defines definiert?
Welche zeichen ändern sich?

MfG
Philipp
 
Innerhalb von switch() {} kann es nur cases geben, weil der Compiler direkt in den passenden case springt und überhaupt nicht schaut, was anderswo steht.
Genau das ist doch der Sinn eines switch(), weil er so gegenüber if->then schneller ist.
In deinem Code bekommst du also

Code:
switch(c)
   if (a==1) { // ignorierte Zeile
      case 0: 
      tue was;
      break;
   }
   if (a==0) { // ignorierte Zeile
      case 0:  // ERROR, doppelte case value
      tue etwas anderes;
      break;
   }
}

Wenn du unbedingt deine Schachtelung beibehalten willst, musst du statt swicth() halt if() und else if() verwenden.
Mit switch() geht es nur so wie Philipp beschrieben hat, oder

Code:
if (a==1) {
switch(c) {
      case 0: tue was; break;
}
}
if (a==0) {
switch(c) {
      case 0: tue was; break;
}
}
 
Zuletzt bearbeitet:
Zurück