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
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
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?
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.
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
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)) { . . . }
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.