Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – 11. diel - Pretypovania a operátormi

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Avatar
Cement
Člen
Avatar
Cement:8.4.2017 21:20

Co konkrétně dělá v podmínce "(bool)cin"? Když je zadán prázdný řetězec, tak cin má hodnotu false a vyskočí z cyklu while?

Musí být "int precteno" v cyklu while nebo stačí proměnnou definovat před cyklem?

Předpokládám, že má být správně "suma += precteno;".

Odpovedať
Když selžou všechny pokusy, použijte návod.
Avatar
Odpovedá na Cement
Patrik Valkovič:8.4.2017 21:47

Ano, má být "suma += precteno;", opraveno.
"(bool)cin" zjistí, že čtení proběhlo úspěšně. Například když na vstup příjde "l", tak cin pozná, že to není číslo a při následném přetypování vrátí false.
promměná "precteno" může být umístěna i před cyklem. Takhle to vypadá, že se proměnná inicializuje při každé průchodu cyklu, ale kompilátor kód optimalizuje a vystrčí ji stejně ven.

Odpovedať
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Cement
Člen
Avatar
Cement:9.4.2017 11:41

V podmínce je to "(bool)cin" zbytečné, protože nebude mít nikdy hodnotu menší než nula. Možná by tam mělo být "(bool)cin = 0".

Odpovedať
Když selžou všechny pokusy, použijte návod.
Avatar
Odpovedá na Cement
Patrik Valkovič:9.4.2017 12:28

Co je to za hloupost? Tady nejde o hodnotu, ale o logické true nebo false. Pokud se cinu nepodaří přečíst znak, poté při přetypování na bool vrací false a cyklus se ukončí. Stejně tak, pokud se zadá záporné číslo, tak se cyklus ukončí. Schválně zkus program zkompilovat a dát tam čísel ap oté třeba "k".

Odpovedať
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Odpovedá na Patrik Valkovič
Neaktivní uživatel:9.4.2017 12:39

Nema cin pretypovani na bool explicitni?

Odpovedať
Neaktivní uživatelský účet
Avatar
Cement
Člen
Avatar
Cement:9.4.2017 13:17

No právě, když si program zkopíruji do CodeBlocks, tak ať napíšu cokoli, tak se hned ukončí. Když opravím "(bool)cin = =0" (nula nebo false) tak to dělá asi to, co to má dělat.

Před opravou to hází chybu:
Zadejte cisla (zaporne cislo pro ukonceni): 33
Prumer je: -nan

Oprava: if( (bool)cin == 0 || precteno < 0 )

Po opravě to pracuje asi správně:
Zadejte cisla (zaporne cislo pro ukonceni): 55
55
55
g
Prumer je: 55

Odpovedať
Když selžou všechny pokusy, použijte návod.
Avatar
Odpovedať
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Odpovedá na Cement
Patrik Valkovič:9.4.2017 14:34

Jo máš pravdu, pokud přečte číslo, tak se vyhodnotí na true a tím se program ukončí. Má tam být "!(bool)cin", popřípadě jiná variace. V článku je to opraveno.

Odpovedať
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Jáchym Kouba:5.8.2019 10:49

Super článek, jen taková drobnost na začátku: *Některé operátory ještě nemusíte znát, to nevadí, pbudou probrány až v lekci OOP. *

Avatar
Marek Němec
Člen
Avatar
Marek Němec:20.12.2023 20:23

Nebyla vůbec vysvětlen tento řádek kódu...
(bool)cin==false

Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 10 správy z 10.