Jei pradedate programuoti iš matematinio pagrindo, ši subtili detalė gali jus lengvai sugauti.

C++ yra plačiai naudojama programavimo kalba, tačiau taip pat dažniausiai pasitaiko programavimo klaidų. Daugelis šių klaidų atsiranda dėl loginių klaidų. Visų pirma klaidos, padarytos atliekant palyginimo operacijas, gali turėti įtakos jūsų kodo tikslumui ir patikimumui.

C++ kalba turi vieną konkrečią palyginimo klaidą, kurios daugelis naujų kūrėjų nepastebi. Ši klaida atsiranda dėl neteisingo supratimo, kaip operatoriai veikia atliekant kelis palyginimus. Sužinokite, kaip išvengti šios dažnos klaidos ir kodėl ji išvis įvyksta.

Palyginimai C++

C++ programavimo kalba siūlo daugybę skirtingų funkcijų ir įrankių, taip pat pagrindinių operacijų, tokių kaip palyginimo operatoriai. Palyginimo operatoriai yra specialios operacijos programavimo kalbomis, kurias galite naudoti norėdami palyginti duomenis tarpusavyje. Šiuos operatorius kūrėjai naudoja gana dažnai, ypač kurdami algoritmus.

Kasdieniame gyvenime galite matyti palyginimo operatorius daugelyje skirtingų pavyzdžių. Pavyzdžiui, kai perkate bakalėjos parduotuvėje, palygindami kainas naudojate šiuos operatorius. Jei vienos prekės kaina mažesnė nei kitos, renkatės tą prekę.

instagram viewer

Galite pamatyti palyginimo operatorius jei-kita teiginiai gana dažnai. Palyginimo operatoriai yra vieta, kur reikia patikrinti, ar viena vertė yra didesnė, mažesnė ar lygi kitai vertei. Yra labai maža, bet svarbi detalė, kurios neturėtumėte pamiršti. Palyginimo išraiškų rezultatai pateikia teisingą arba klaidingą, kurios yra loginės reikšmės. Šios reikšmės yra viena iš pagrindinių valdymo struktūros komponentų programuojant.

Pavyzdžiui, C++ programavimo kalba „==" operatorius patikrina, ar dvi reikšmės yra lygios. Jei reikšmės yra lygios, rezultatas bus teisingas. Priešingu atveju rezultatas bus klaidingas.

jeigu (a == b)
{
grąžintitiesa;
}
Kitas
{
grąžintiklaidinga;
}

Palyginimo problemos pavyzdys

Viena iš dažniausiai C++ pradedančiųjų klaidų yra palyginimo operatorių naudojimas. Šie operatoriai leidžia programuotojams palyginti dvi reikšmes ir atlikti skirtingas operacijas pagal to palyginimo rezultatą. Tačiau neteisingai naudojant šiuos operatorius gali atsirasti netikėtų klaidų.

Pavyzdžiui, nors išraiška 3 < 15 < 10 yra matematiškai neteisinga, C++ mano, kad jos rezultatas yra teisingas. Tai galite parodyti parašydami šią paprastą testavimo programą.

Pirmiausia sukurkite failą pavadinimu test.cpp. Atidarykite šį failą naudodami savo mėgstamiausias kodo redaktorius ir pridėkite prie jo šį kodą.

#įtraukti
tarpt a = 15;

tarptpagrindinis()
{
jeigu (3 10)
{
std::cout << "foo" << std::endl;
}
Kitas
{
std::cout << "bu" << std::endl;
}

grąžinti0;
}

Galite naudoti šią komandą kodui kompiliuoti ir paleisti:

g++ test.cpp -o Testas

Dabar turite programą, pavadintą Testas. Paleiskite programą ir patikrinkite jos išvestį.

Vykdant šią programą C++ laikė 3 < 15 < 10 teisingu. Kodėl rezultatas gali pasirodyti toks, nors tai matematiškai neteisingas teiginys?

C++ palyginimo problemos priežastys

Kaip ir dauguma programavimo kalbų, C++ skaito kodą iš kairės į dešinę. Kiekvienas palyginimo operatorius sukuria loginę reikšmę. Būlio reikšmės reiškia ne tik teisingą ir klaidingą; jie turi matematinį atitikmenį.

Darbo principas a kompiuteris priklauso nuo vienetų ir nulių. Kompiuteriui kažko rezultatas yra teisingas arba klaidingas. Kompiuterinės programos dažniausiai traktuoja skaičių 1 kaip teisingą, o skaičių 0 - kaip klaidingą.

Dar kartą išnagrinėkite palyginimo problemą ir perskaitykite teiginį iš kairės į dešinę; pamatysite, kad yra du skirtingi palyginimai. Pirmasis palyginimas yra tarp skaičių 3 ir 15. Tai tikroji reikšmė, nes 3 yra mažesnė nei 15.

Antrasis palyginimas yra tarp šio rezultato ir skaičiaus 10. Kadangi reikia atlikti skaitinį palyginimą, C++ tyliai konvertuoja loginę tikrąją reikšmę į 1. 1 yra mažesnis nei 10, todėl bendras rezultatas yra teisingas.

Apibendrinant, nors tai atrodo kaip matematinė klaida, šis teiginys tinka C++ ir kompiuteriams.

Kaip išspręsti palyginimo problemas C++

C++, kaip ir dauguma kitų programavimo kalbų, loginiam palyginimui naudoja skirtingą sintaksę nei tradicinė matematika. Matematinė išraiška 3 < a < 15 reiškia „3 yra mažesnė už a ir a yra mažesnis nei 15. Tačiau, kaip matėte, C++ šią išraišką interpretuoja skirtingai.

Norėdami atstovauti ir C++, naudokite operatorių &&. Tada galite sujungti logines išraiškas ir kurti logiką naudodami tokius operatorius kaip && atstovauti IR, || atstovauti ARBA ir ! atstovauti NE. Kalbos kaip Java naudoja tuos pačius loginius operatorius.

Naudodami teisingą loginį operatorių, galite ištaisyti klaidą ankstesniame pavyzdyje:

#įtraukti
tarpt a = 15;

tarptpagrindinis()
{
jeigu (3 < a && a < 10)
{
std::cout << "foo" << std::endl;
}
Kitas
{
std::cout << "bu" << std::endl;
}

grąžinti0;
}

Dabar šis kodas patikrins, ar a reikšmė yra didesnė nei 3 ir ar vertė a yra mažesnė nei 10. Sukompiliuokite ir paleiskite programą ir stebėkite rezultatą.

Ankstesniame pavyzdyje buvo išspausdinta „foo“, bet dabar programa spausdina „boo“, kaip numatyta. Kairiosios palyginimo pusės loginė reikšmė (3 < a) yra teisinga. Dešinės pusės reikšmė (a < 10) yra klaidinga. Nuo tiesa ir netikra yra visada klaidinga, bendra išraiška įvertinama kaip klaidinga, todėl ši sąlyga nepavyksta ir Kitas blokas bėga.

Pabandykite perjungti AND (&&) operatorius į ARBA (||) ir stebint skirtingą rezultatą.

Loginių patikrinimų svarba C++

Loginiai palyginimai C++ apima loginių reikšmių ir palyginimo operatorių naudojimą. Įsitikinkite, kad naudojate teisingas logines reikšmes ir palyginimo operatorius, kad galėtumėte valdyti savo programų veikimą. Gali būti sunku pastebėti blogai suformuotas išraiškas, nes C++ dažnai elgsis kitaip, o ne visiškai žlugs.

Dabar žinote, kaip kompiliatoriai nepaiso šios problemos ir kiekvieną palyginimą traktuoja kaip loginį skaičiavimą iš kairės į dešinę. Saugokitės šios problemos bet kuria vartojama kalba ir išmokite atpažinti jos poveikį, kad būtumėte vienu žingsniu priekyje.