www.mikrocontroller.net

Forum: Compiler & IDEs Verinfachung ODER-Verknüpfung in if-Schleife


Autor: antis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe mal eine Frage zu der Vereinfachung einer ODER-Verknüpfung in 
einer if-Abfrage. Und zwar handelt es sich dabei um eine Menüsteuerung, 
bei der bei verschiedenen Menüanzeigen auf Tastendruck das gleiche 
Untermenü angezeigt werden soll. Bisher habe ich das wie folgt gelöst:

if ((Menü == 1) || (Menü == 2) || Menü == x))
  wechseln zu Menü 10;

Das ich das nicht so schreiben kann:

if (Menü == (1 || 2 || 3 || x))
  wechseln zu Menü 10;

habe ich  mittlerweile schon herausgefunden. Aber wie kann ich das sonst 
vereinfachen. Oder ist das an dieser Stelle einfach nicht möglich und 
ich kann mir die Schreibarbeit nicht sparen.

Ich habe schon diverse Beiträge durchstöbert, aber zu diesem Thema 
leider nicht die passende Info finden können.

Vielleicht kann mir hier jemand helfen?

gruß
antis

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
C kennt nur for-, do- und while-Schleifen, aber keine if-Schleife.

Für die obige Aufgabe ist das switch geeignet:
switch( Menue ){
  case 1:
  case 2:
  case 3: Menue = 10;
}

Umlaute in Quelltexten sollte man vermeiden, könnte manchen Compiler 
irritieren.



Peter

Autor: antis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mit den Umlauten war nur ein Beispiel um mein Problem einfacher 
darstellen zu können. Wenn ich programmiere verwende ich keine Umlaute. 
Ich schreibe zudem auch alle Variablen klein, damit ich mir da keine 
zufälligen Fehler einhandle.

Zum eigentlichen Problem:
Eine "Switch-Case-Anweisung" hilft mir da auch nicht wirklich weiter, da 
ich dann unter "Case 1" Menü 10 schreiben muss, unter Case 2 und unter 
Case x ebenfalls. Damit spare ich mir die Bedingung bei der if-Abfrage, 
muss dann aber die Anweisung jedesmal schreiben. Daher spart das nicht 
wirklich was an Schreibaufwand. Er wird halt nur anders verteilt.

Gibt es vielleicht noch andere Vorschläge?

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
antis wrote:
> Eine "Switch-Case-Anweisung" hilft mir da auch nicht wirklich weiter, da
> ich dann unter "Case 1" Menü 10 schreiben muss, unter Case 2 und unter
> Case x ebenfalls.
Nö. Peter hat es doch oben vorgemacht: In seinem Fall wird für die Fälle 
1, 2 und 3 "Menue = 10" ausgeführt.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
switch( Menue ){
  case 1:
  case 2:
  case 3: Menue = 10;
  break;
  case 4:
  case 5: Menue = 20;
  break;
  case 6: Menue = 30;
  break;
  default: Menue = 99;
}
Das käme doch vermutlich Deinen Anforderungen am nächsten. Und ist 
wesentlich übersichtlicher als mit if...else if...else

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man kann das auch mit binären Operatoren machen:

#define MENU1  1
#define MENU2  2
#define MENU3  4
#define MENU4  8
#define MENU5 16
#define MENU5 32

. . .

if (Menue & (MENU1 | MENU2 | MENU3)) {
    . . .
} else if (Menu & (MENU4 | MENU5 | MENU6)) {
    . . .
}

Autor: antis (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok ok....

das hat mir schon um einiges weitergeholfen. Dass das break in der 
Switch- Anweisung fehlt hatte ich auf die Schnelle übersehen.

Mal schauen für welche Variante ich mich da entscheiden werde. Werde 
beide mal ausprobieren.

Danke für die schnelle Hilfe.

gruß
antis

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.