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


von antis (Gast)


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

von Peter D. (peda)


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

von antis (Gast)


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?

von Johannes M. (johnny-m)


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.

von Johannes M. (johnny-m)


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

von Martin (Gast)


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)) {
    . . .
}

von antis (Gast)


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

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.