Wenn Sie von einem mathematischen Hintergrund zum Programmieren kommen, kann Sie dieses subtile Detail leicht überraschen.
C++ ist eine weit verbreitete Programmiersprache, aber auch eine, in der Programmierfehler am häufigsten vorkommen. Viele dieser Fehler sind auf logische Fehler zurückzuführen. Insbesondere Fehler bei Vergleichsvorgängen können die Genauigkeit und Zuverlässigkeit Ihres Codes beeinträchtigen.
Die Sprache C++ hat einen bestimmten Vergleichsfehler, den viele neue Entwickler übersehen. Dieser Fehler resultiert aus einem falschen Verständnis der Funktionsweise von Operatoren beim Durchführen mehrerer Vergleiche. Erfahren Sie, wie Sie diesen häufigen Fehler vermeiden und warum er überhaupt auftritt.
Vergleiche in C++
Die Programmiersprache C++ bietet viele verschiedene Funktionen und Werkzeuge sowie grundlegende Operationen wie Vergleichsoperatoren. Vergleichsoperatoren sind spezielle Operationen in Programmiersprachen, mit denen Sie Daten miteinander vergleichen können. Entwickler verwenden diese Operatoren häufig, insbesondere beim Erstellen von Algorithmen.
Sie können Vergleichsoperatoren in vielen verschiedenen Beispielen im täglichen Leben sehen. Wenn Sie beispielsweise im Lebensmittelgeschäft einkaufen, verwenden Sie diese Operatoren im Hinterkopf, um Preise zu vergleichen. Wenn der Preis eines Produkts niedriger ist als der des anderen, wählen Sie dieses Produkt.
Sie können Vergleichsoperatoren in sehen if-else-Anweisungen ziemlich oft. Vergleichsoperatoren sind der richtige Ort, um zu überprüfen, ob ein Wert größer, kleiner oder gleich einem anderen Wert ist. Es gibt ein sehr kleines, aber wichtiges Detail, das Sie nicht übersehen sollten. Ergebnisse von Vergleichsausdrücken geben wahr oder falsch zurück, was boolesche Werte sind. Diese Werte sind eine der Grundkomponenten der Kontrollstruktur in der Programmierung.
Beispielsweise ist in der Programmiersprache C++ das "=="Operator prüft, ob zwei Werte gleich sind. Wenn die Werte gleich sind, gibt das Ergebnis wahr zurück. Andernfalls ist das Ergebnis falsch.
Wenn (a == b)
{
zurückkehrenWAHR;
}
anders
{
zurückkehrenFALSCH;
}
Ein Beispiel für ein Vergleichsproblem
Einer der häufigsten Fehler, den C++-Anfänger machen, ist die Verwendung von Vergleichsoperatoren. Diese Operatoren ermöglichen es Programmierern, zwei Werte zu vergleichen und basierend auf dem Ergebnis dieses Vergleichs verschiedene Operationen durchzuführen. Die falsche Verwendung dieser Operatoren kann jedoch zu unerwarteten Fehlern führen.
Obwohl beispielsweise der Ausdruck 3 < 15 < 10 mathematisch falsch ist, betrachtet C++ sein Ergebnis als wahr. Sie können dies demonstrieren, indem Sie das folgende einfache Testprogramm schreiben.
Erstellen Sie zunächst eine Datei mit dem Namen test.cpp. Öffnen Sie diese Datei mit Ihrem Lieblings-Code-Editor und fügen Sie den folgenden Code hinzu.
#enthalten
int ein = 15;inthauptsächlich()
{
Wenn (3 < ein < 10)
{
Standard::cout << "Foo" << Standard::endl;
}
anders
{
Standard::cout << "buh" << Standard::endl;
}
zurückkehren0;
}
Sie können diesen Befehl verwenden, um den Code zu kompilieren und auszuführen:
g++ test.cpp -o Test
Sie haben jetzt ein Programm namens Prüfen. Führen Sie das Programm aus und untersuchen Sie seine Ausgabe.
C++ betrachtete 3 < 15 < 10 als wahr, wenn dieses Programm ausgeführt wurde. Warum könnte das Ergebnis so herauskommen, obwohl es eine mathematisch falsche Aussage ist?
Ursachen des Vergleichsproblems in C++
Wie die meisten Programmiersprachen liest C++ Code von links nach rechts. Jeder Vergleichsoperator erzeugt einen booleschen Wert. Boolesche Werte bedeuten nicht nur wahr und falsch; Sie haben ein mathematisches Äquivalent.
Das Arbeitsprinzip einer Computer hängt von Einsen und Nullen ab. Für einen Computer ist das Ergebnis von etwas entweder wahr oder falsch. Computerprogramme behandeln normalerweise die Zahl 1 als wahr und die Zahl 0 als falsch.
Untersuchen Sie die Vergleichsaufgabe noch einmal und lesen Sie die Aussage von links nach rechts; Sie werden sehen, dass es zwei verschiedene Vergleiche gibt. Der erste Vergleich findet zwischen den Zahlen 3 und 15 statt. Dies ist ein wahrer Wert, da 3 kleiner als 15 ist.
Der zweite Vergleich findet zwischen diesem Ergebnis und der Zahl 10 statt. Da ein numerischer Vergleich durchgeführt werden muss, wandelt C++ den booleschen True-Wert stillschweigend in 1 um. 1 ist kleiner als 10, also ist das Gesamtergebnis wahr.
Zusammenfassend lässt sich sagen, dass diese Aussage, obwohl es wie ein mathematischer Irrtum erscheint, für C++ und Computer gilt.
So lösen Sie Vergleichsprobleme in C++
C++ verwendet zusammen mit den meisten anderen Programmiersprachen eine andere Syntax für logische Vergleiche als traditionelle Mathematik. Der mathematische Ausdruck 3 < a < 15 bedeutet „3 ist kleiner als a Und a ist kleiner als 15.“ Wie Sie jedoch gesehen haben, interpretiert C++ diesen Ausdruck anders.
Um und in C++ darzustellen, verwenden Sie den Operator &&. Sie können dann boolesche Ausdrücke miteinander verketten und mithilfe von Operatoren wie z. B. eine Logik erstellen && UND darstellen, || um OR darzustellen, und ! NICHT darstellen. Sprachen wie Java verwendet dieselben logischen Operatoren.
Mit dem richtigen logischen Operator können Sie den Fehler im vorherigen Beispiel beheben:
#enthalten
int ein = 15;inthauptsächlich()
{
Wenn (3 < ein && ein < 10)
{
Standard::cout << "Foo" << Standard::endl;
}
anders
{
Standard::cout << "buh" << Standard::endl;
}
zurückkehren0;
}
Dieser Code testet nun, ob der Wert a größer als 3 und ob der Wert a kleiner als 10 ist. Kompilieren Sie das Programm, führen Sie es aus und beobachten Sie das Ergebnis.
Das vorherige Beispiel hat „foo“ ausgegeben, aber das Programm gibt jetzt wie beabsichtigt „boo“ aus. Der boolesche Wert der linken Seite des Vergleichs (3 < a) ist wahr. Der Wert der rechten Seite (a < 10) ist falsch. Seit richtig und falsch ist immer FALSCH, wird der Gesamtausdruck als falsch ausgewertet, sodass die Bedingung fehlschlägt und die anders Block läuft.
Versuchen Sie, das UND zu schalten (&&) Operator zu einem ODER (||) und das unterschiedliche Ergebnis beobachten.
Die Bedeutung logischer Prüfungen in C++
Logische Vergleiche in C++ beinhalten die Verwendung von booleschen Werten und Vergleichsoperatoren. Stellen Sie sicher, dass Sie die richtigen booleschen Werte und Vergleichsoperatoren verwenden, um den Betrieb Ihrer Programme zu steuern. Es kann schwierig sein, schlecht geformte Ausdrücke zu erkennen, da C++ oft ein anderes Verhalten ausführt, anstatt vollständig zu versagen.
Jetzt wissen Sie, wie Compiler dieses Problem ignorieren und jeden Vergleich beim Lesen von links nach rechts als booleschen Wert behandeln. Achten Sie auf dieses Problem in jeder Sprache, die Sie verwenden, und lernen Sie, seine Auswirkungen zu erkennen, damit Sie immer einen Schritt voraus sind.