7 Stimmen

wie man in C auf die Gleichwertigkeit mehrerer Variablen prüft

Angenommen, ich möchte nicht nur eine, sondern mehrere Variablen in einer if-Anweisung auf Gleichwertigkeit prüfen:

if(x1==x2==y1==y2){
    printf("Input values shouldn't be equal!");
}

Aber das scheint nicht zu funktionieren. Welcher andere Ansatz kann dies tun?

1 Stimmen

Meinen Sie, dass 1, 1, 1, 1 ungültig ist, aber 1, 1, 1, 2 gültig ist, oder müssen sie alle unterschiedlich sein?

0 Stimmen

1,1,1,1 ist ungültig, aber 1,1,1,2 ist gültig. Nur wenn alle Variablen auf denselben Wert gesetzt sind, ist sie ungültig.

1voto

Die hier vorgestellten Lösungen waren größtenteils richtig und leicht zu verstehen.

Aber ich würde die Lösung bereitgestellt von Sany Huttunen :

zitiert:

if (x1 == x2 && x1 == y1 && x1 == y2)
{
  printf("Input values shouldn't be equal!");
}

Hier ist der Grund dafür :

Obwohl es in diesem konkreten Fall nicht möglich zu sein scheint, hat es mich sofort dazu gebracht, über Refactoring nachzudenken, wie in:

(a*b) + (a*c) + (a*d)

die vereinfacht werden könnte zu

a*(b+c+d)

wie bereits erwähnt, ist eine Vereinfachung in diesem konkreten Fall jedoch nicht möglich, da

(a*b) + (a*c) + (a*d)

folgt anderen mathematischen Regeln als

(a+b) * (a+c) * (a+d)

Das hat etwas mit Kommutativ-, Assoziativ- und Distributivregeln zu tun, wenn ich mich richtig erinnere.

0voto

M1EK Punkte 810

Das funktioniert nicht, weil (x1 == x2) übrigens die Zahl 1 ergibt, wenn es wahr ist, und 0, wenn es falsch ist. (x1 == x2 == x3) wird am Ende als ((x1 == x2) == x3) ausgewertet.

Ich denke, Sie müssen dafür eine eigene Funktion schreiben.

0voto

aJ. Punkte 33220

Der folgende C-Code sollte Ihre Frage beantworten:

if(x1==x2 && x1 == y1 && x1 == y2 && 
            x2==y1 && x2 == y2 &&
             y1 == y2)
{ printf("Input values shouldn't be equal!"); }
  return 0;
}

0voto

Thomas Matthews Punkte 54757

Hier ist eine weitere Methode, die boolesche Logik verwendet

bool all_equal(false)
all_equal = x1 == x2;
all_equal = all_equal && (x2 == x3);
all_equal = all_equal && (x3 == x4);

Ein guter Compiler kann dies mit Hilfe von bedingten Assembleranweisungen kodieren, ohne die Prefetch-Warteschlange zu stören.

-1voto

Josh Weatherly Punkte 1678

Ihr Problem ist die falsche Verwendung des == Operators. Sie müssten etwas verwenden wie:

if ((x1 == x2) && (x1 == y1) && (x1 == y2)) {
   printf("Input values shouldn't be equal!"); 
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X