www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frage zu erweiterten Verwendung der switch-case


Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine switch-case sieht ja nomalerweise so aus.

 switch(x)
 {
  case 210: l = 1;
  break;
  .
  .
  .
  .

 }

Wie kann ich jetzt in einer switch-case etwas zwischen zwei werten 
"vergleichen".
Also x zwischen 10 und 20.

mfg

PS. So sieht das in Basic aus.
    Case 10 To 20: l = 1

Autor: stibe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
if(i>10&&i<20){

}

Autor: tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
case 11:
 // anweisungen
 break;
case 12:
 // anweisungen
 break;

 ...
case 19:
 //anweisungen
 break;

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johannes schrieb:

> Also x zwischen 10 und 20.

Gar nicht.
Ein case in C geht immer nur auf einen konstanten Wert.
Wenn dein zu testender Bereich klein ist, kannst du die Fall-through 
Lösung benutzen

  switch( x ) {
    case 0:
      mach was;
      break;

    case 5:
      mach was anderes;
      break;

    case 10:
    case 11:
    case 12:
      mach was für 10, 11, 12
      break;
  }

aber abgesehen davon, benutzt du dann mit einem switch-case ganz einfach 
das falsche Werkzeug und solltst auf if else-if Ketten ausweichen.

Autor: Martin Freund (martinf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du könntest auf x ne Funktion anwenden, die den Wertebereich 
einschränkt, um mit weniger cases auszukommen.

Autor: stibe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wiso muss es denn switch sein!?

if(i>10&&i<20){

}

else{
}

macht genau das

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der gcc kann das aber als Erweiterung (also nicht portabel gegenüber
anderen Compilern):
  switch( i )
  {
    case 0:
      puts( "nix" );
      break;

    case 1 ... 5:
      puts( "1 bis 5" );
      break;

    case 6:
      puts( "6" );
      break;

    default :
      puts( "?" );
      break;
  }

Siehe http://gcc.gnu.org/onlinedocs/gcc/Case-Ranges.html...

Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich dachte nur es könnte vll. mit switch gehen würde übersichtlicher 
aussehen.
Denn in Basic und php habe ich das schon gesehen.

Danke für eure Hilfe. Dann werde ich es doch mit if aufbauen.

Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Klaus: Ah hab dein post ganz übersehen. Vielen vielen DANK.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bitteschön.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.