Verinfachung ODER-Verknüpfung in if-Schleife

Gast #922267
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
#922275
Lesenswert?

C kennt nur for-, do- und while-Schleifen, aber keine if-Schleife.

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

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



Peter
Gast #922385
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?
#922391
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.
#922396
Lesenswert?

1
switch( Menue ){
2
  case 1:
3
  case 2:
4
  case 3: Menue = 10;
5
  break;
6
  case 4:
7
  case 5: Menue = 20;
8
  break;
9
  case 6: Menue = 30;
10
  break;
11
  default: Menue = 99;
12
}
Das käme doch vermutlich Deinen Anforderungen am nächsten. Und ist 
wesentlich übersichtlicher als mit if...else if...else
Gast #922404
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)) {
    . . .
}
Gast #922476
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren