Mehrfache ODER-Abfrage
-
Hallo,
Ich konnte leider nichts im Internet finden, deswegen wende ich mich an euch.
Die Frage: Geht das so?
if( Index != (1 || 9 || 17) ){
Oder muss ich das wirklich separat so machen?
if( (Index != 1) || (Index != 9) || (Index != 17) ){
Bzw anders: Gibt es noch einen anderen Weg, der evtl. eleganter ist?
Dankeschoen
der Hannes
-
du wirst es in der langen Form schreiben müssen, auch, wenn der Code, den du gepostet hast sicherlich nicht das macht, was du gerne hättest.
if( (Index != 1) || (Index != 9) || (Index != 17) ){
ist immer wahr, denn selbst wenn Index eine der drei Zahlen ist, so würden die anderen Teilbedingungen trotzdem noch wahr.
du meinst sicherlich eher:
if( (Index != 1) && (Index != 9) && (Index != 17) ){
Diese Bedingung ist nur wahr, wenn Index keine der drei Zahlen ist.
Eine etwas ungewohnte, aber sicherlich auch mögliche Schreibweise wäre diese:
switch (Index) { 1: 9: 17: break; default: { // Hier der Code } }
Aber leserlicher wird der Code dadurch sicher nicht^^
-
DrakoXP schrieb:
Aber leserlicher wird der Code dadurch sicher nicht^^
Kommt halt drauf an, wenn man so ~25 verschiedene Zahlen ausschließen möchte finde ich das gar nicht mal so schlecht.
-
Sehe ich auch so ... ein switch-Konstrukt war das Erste, was mir nach Lesen des Eingangspostings einfiel.
-
Warscheinlich ist
if(Index%8!=1)
gemeint.
-
Schneller dürfte es auch werden mit:
if( !(Index&1) || (Index != 1) || (Index != 9) || (Index != 17) ){
-
Wutz, deine if-Bedingung ist genau wie die vom TS immer wahr...
also effizienter wäre dann doch (wenn man das tatsächlich so will)if (true) {
-
DrakoXP schrieb:
Wutz, deine if-Bedingung ist genau wie die vom TS immer wahr...
also effizienter wäre dann doch (wenn man das tatsächlich so will)Kleiner aber feiner Unterschied: Wutz prüft zuerst, ob die Zahl gerade ist (!(Index&1)). Ist dies der Fall, werden die anderen Bedingungen gar nicht erst angeguckt. Falls Index gerade sein sollte, spart man so 2 unnötige Vergleiche, bei ungeraden Zahlen hat man einen Vergleich mehr. Falls Index gleichverteilt ist, dann gewinnt man im Schnitt.
-
Was ist da falsch?
#include <stdio.h> int main(void) { int Index; for(Index=0;Index<20;++Index) if( !(Index&1) || (Index != 1) || (Index != 9) || (Index != 17) ) printf("%d wahr\n", Index); else printf("%d unwahr\n", Index); return 0; }
ergibt
0 wahr 1 wahr 2 wahr 3 wahr 4 wahr 5 wahr 6 wahr 7 wahr 8 wahr 9 wahr 10 wahr 11 wahr 12 wahr 13 wahr 14 wahr 15 wahr 16 wahr 17 wahr 18 wahr 19 wahr
-
Ja natürlich, man sollte eben nicht fremden Code auch nicht teilweise übernehmen, also:
if( !(Index&1) || (Index != 1) && (Index != 9) && (Index != 17) ){
sollte dann auch schneller sein und sogar funktionieren.