Ha matematikai háttérből érkezel a programozáshoz, ez a finom részlet könnyen megragadhat.
A C++ egy széles körben használt programozási nyelv, de a programozási hibák is a leggyakoribbak. A legtöbb ilyen hiba logikai hibákra vezethető vissza. Különösen az összehasonlítási műveletek során elkövetett hibák befolyásolhatják a kód pontosságát és megbízhatóságát.
A C++ nyelvnek van egy sajátos összehasonlítási hibája, amelyet sok új fejlesztő figyelmen kívül hagy. Ez a hiba abból adódik, hogy nem megfelelően értette meg az operátorok működését többszörös összehasonlítás során. Tudja meg, hogyan kerülheti el ezt a gyakori hibát, és miért fordul elő először.
Összehasonlítások C++ nyelven
A C++ programozási nyelv számos különféle funkciót és eszközt kínál, valamint alapvető műveleteket, például összehasonlító operátorokat. Az összehasonlító operátorok olyan speciális műveletek a programozási nyelvekben, amelyek segítségével összehasonlíthatja az adatokat egymással. A fejlesztők gyakran használják ezeket az operátorokat, különösen algoritmusok létrehozásakor.
A mindennapi életben számos különböző példában láthat összehasonlító operátorokat. Például amikor egy élelmiszerboltban vásárol, ezeket az operátorokat használja az árak összehasonlítására. Ha az egyik termék ára alacsonyabb, mint a másiké, akkor azt a terméket választja.
Itt láthatja az összehasonlító operátorokat ha-más kijelentések elég gyakran. Az összehasonlító operátorok az a hely, ahol ellenőrizni kell, hogy az egyik érték nagyobb-e, kisebb-e vagy egyenlő-e egy másik értékkel. Van egy nagyon apró, de fontos részlet, amit nem szabad figyelmen kívül hagyni. Az összehasonlító kifejezések eredményei igaz vagy hamis értéket adnak vissza, amelyek logikai értékek. Ezek az értékek a programozás vezérlési struktúrájának egyik alapelemét képezik.
Például a C++ programozási nyelvben a "==" operátor ellenőrzi, hogy két érték egyenlő-e. Ha az értékek egyenlőek, az eredmény igazat ad vissza. Ellenkező esetben az eredmény hamis lesz.
ha (a == b)
{
Visszatérésigaz;
}
más
{
Visszatéréshamis;
}
Példa összehasonlítási problémára
A C++ kezdők egyik gyakori hibája az összehasonlító operátorok használata. Ezek az operátorok lehetővé teszik a programozóknak, hogy összehasonlítsanak két értéket, és az összehasonlítás eredménye alapján különböző műveleteket hajtsanak végre. Ezeknek az operátoroknak a helytelen használata azonban váratlan hibákat okozhat.
Például, bár a 3 < 15 < 10 kifejezés matematikailag hibás, a C++ az eredményét igaznak tekinti. Ezt a következő egyszerű tesztprogram megírásával demonstrálhatja.
Először hozzon létre egy nevű fájlt teszt.cpp. Nyissa meg ezt a fájlt a saját kedvenc kódszerkesztő és adja hozzá a következő kódot.
#tartalmazza
int a = 15;intfő-()
{
ha (3 < a < 10)
{
std::cout << "foo" << std::endl;
}
más
{
std::cout << "lehurrogás" << std::endl;
}
Visszatérés0;
}
Ezzel a paranccsal fordíthatja le és futtathatja a kódot:
g++ teszt.cpp -o Teszt
Most van egy programod, melynek neve Teszt. Futtassa a programot, és vizsgálja meg a kimenetét.
A C++ a 3 < 15 < 10 értéket tekinti igaznak a program futtatásakor. Miért jöhet ki így az eredmény, noha ez matematikailag hibás állítás?
Az összehasonlítási probléma okai C++ nyelven
A legtöbb programozási nyelvhez hasonlóan a C++ is balról jobbra olvassa a kódot. Minden összehasonlító operátor létrehoz egy logikai értéket. A logikai értékek nem csak igazat és hamisat jelentenek; matematikai megfelelőjük van.
A működési elve a a számítógép egyesektől és nulláktól függ. A számítógép számára valaminek az eredménye igaz vagy hamis. A számítógépes programok általában az 1-est igaznak, a 0-t hamisnak tekintik.
Vizsgálja meg újra az összehasonlítási problémát, és olvassa el az állítást balról jobbra; látni fogja, hogy két különböző összehasonlítás létezik. Az első összehasonlítás a 3-as és a 15-ös számok között van. Ez igaz érték, mert a 3 kisebb, mint 15.
A második összehasonlítás az eredmény és a 10 között történik. Mivel numerikus összehasonlítást kell végeznie, a C++ csendben konvertálja a logikai igaz értéket 1-re. Az 1 kisebb, mint 10, tehát az összesített eredmény igaz.
Összefoglalva, bár matematikai tévedésnek tűnik, ez az állítás igaz a C++-ra és a számítógépekre.
Összehasonlítási problémák megoldása C++ nyelven
A C++ a legtöbb más programozási nyelvvel együtt más szintaxist használ a logikai összehasonlításhoz, mint a hagyományos matematika. A 3 < a < 15 matematikai kifejezés azt jelenti, hogy „3 kisebb, mint a és a kisebb, mint 15.” Azonban, amint láthatta, a C++ másképp értelmezi ezt a kifejezést.
A és C++ nyelven való megjelenítéséhez használja az && operátort. Ezután összeláncolhatja a logikai kifejezéseket, és logikát építhet olyan operátorok segítségével, mint például && képviselni ÉS, || az VAGY képviseletére, és ! képviselni NEM. Nyelvek, mint A Java ugyanazokat a logikai operátorokat használja.
A megfelelő logikai operátor használatával kijavíthatja a hibát a korábbi példában:
#tartalmazza
int a = 15;intfő-()
{
ha (3 < a && a < 10)
{
std::cout << "foo" << std::endl;
}
más
{
std::cout << "lehurrogás" << std::endl;
}
Visszatérés0;
}
Most ez a kód azt teszteli, hogy az a érték nagyobb-e, mint 3, és hogy az a kisebb-e 10-nél. Fordítsa le és futtassa a programot, és figyelje meg az eredményt.
Az előző példa a „foo”-t írta ki, de a program most a „boo”-t írja ki, ahogyan azt szándékoztunk. Az összehasonlítás bal oldalának logikai értéke (3 < a) igaz. A jobb oldal értéke (a < 10) hamis. Mivel igaz és hamis mindig hamis, az általános kifejezés hamisra értékelődik, így a feltétel meghiúsul, és a más blokk fut.
Próbáld meg az ÉS-t váltani (&&) operátor egy VAGY (||) és az eltérő eredmény megfigyelése.
A logikai ellenőrzések jelentősége a C++ nyelven
A C++ logikai összehasonlítása logikai értékek és összehasonlító operátorok használatát foglalja magában. Győződjön meg arról, hogy a megfelelő logikai értékeket és összehasonlító operátorokat használja a programok működésének vezérléséhez. Nehéz lehet észrevenni a rosszul formázott kifejezéseket, mert a C++ gyakran más viselkedést fog végrehajtani, nem pedig teljesen kudarcot vallani.
Most már tudja, hogyan hagyják figyelmen kívül a fordítók ezt a problémát, és balról jobbra olvasva minden összehasonlítást logikai értékként kezelnek. Ügyeljen erre a problémára bármilyen nyelven, és tanulja meg felismerni a hatásait, hogy egy lépéssel előtte járhasson.