NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 8 - Ošetření uživatelských vstupů v C# .NET

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Odpovídá na Filip Dvořáček
Michal Šmahel:9.3.2019 10:04

Ahoj, vykřičník v jakémkoliv druhu podmínky značí negaci. Negace je vlastně obrácení pravdivostní hodnoty (true --> false, false --> true).

V tomto případě jde o to, že se zkouší, zda půjde vstup převést na float - ověřuje se jeho správnost. Pokud převedení projde (metoda tryParse() vrátí true), zadaný vstup je správný a může se pokračovat dál. Jestli však nikoliv, je nutné tento stav zachytit podmínkou, upozornit uživatele a případně provést další kroky. Pokud by před float nebyl vykřičník, podmínka by byla splněna v případě, že je vstup správný. Zapotřebí je však zjištění opačného stavu, takže se to musí znegovat právě vykřičníkem.

Odpovědět
9.3.2019 10:04
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Odpovídá na Michal Šmahel
Filip Dvořáček :10.3.2019 8:21

Moc díky za skvělé vysvětlení

 
Odpovědět
10.3.2019 8:21
Avatar
Honzis
Člen
Avatar
Honzis:1.5.2019 13:50

Ahoj,
díky moc za super lekce C#. I díky tomu, že přecházím z jiného jazyka, tak zatím jedu bez problému a baví mne to. Zde jsem však narazil na něco, čemu úplně nerozumím a to konkrétně kombo: Console.ReadKe­y().KeyChar.ToS­tring().ToLower(). Jestli to dobře chápu, tak pomocí ReadKey() zadá uživatel nějaký vstup, tedy "něco," což nevím co to vlastně je, tedy jaký datový typ to vlastně je, co uživatel zadá přes ReadKey(), když to není ani char, ani string. Toto "něco" si následně převedu přes KeyChar na char a pak ještě z charu na string a s tím pak teprve pracuji pomocí ToLower(). Proč to je tak komplikované? Není nějaká jednodušší cesta? Proč se to "neco - nevím co" převádí nejprve na char a pak na string, nejde to třeba rovnou na string ? Omlouvám se, pokud jsem zde položil hloupý dotaz, ale C# se teprve učím.

 
Odpovědět
1.5.2019 13:50
Avatar
Odpovídá na Honzis
Neaktivní uživatel:1.5.2019 14:05

To něco je <a href="https:/­/docs.microsof­t.com/en-us/dotnet/api/sys­tem.consoleke­yinfo?view=net­framework-4.8">ConsoleKe­yInfo</a>. Zkus si představit, že zmáčkneš třeba šipku. To pak není žádný znak, ale klávesu jsi zmáčkl. Proč je to <code>char</code>? Viděl jsi už někdy, že by se při stisku jedné klávesy vložilo víc znaků než jeden? A vzhledem k tomu, že přecházíš z jiného jazyka, snad chápeš, že v takovém případě je výhodnější použít <code>char</code>.
<code>ToLower()</co­de> sice existuje i pro <code>char</code>, ale musel bys psát <code>char.To­Lower(Console­.ReadKey().Ke­yChar)</code> a David Hartinger se asi rozhodl, že to bude přehlednější přes <code>ToStrin­g()</code>. Nebo je to možná používanější, to nevím.

Odpovědět
1.5.2019 14:05
Neaktivní uživatelský účet
Avatar
Honzis
Člen
Avatar
Odpovídá na Neaktivní uživatel
Honzis:1.5.2019 14:24

To byla fakt blesková odpověď, díky :-) No to tvoje řešení mi přijde logičtější, protože jak jsi řekl, jednou klávesou mohu zadat pouze jeden znak a datový typ char je pro tento účel určený. Převádět to tedy ještě z charu na string mi přijde trošku nelogické, když string je určený pro delší řetězec, než jeden znak, ale to už se v tom asi pitvám až moc, na výsledek to očividně nemá vliv.

 
Odpovědět
1.5.2019 14:24
Avatar
Dereq
Člen
Avatar
Odpovídá na samo007
Dereq:8.1.2020 23:19

Proč tam nefunguje příkaz WriteLine, ale napíše se to do stejného řádku k zadanému znaku?
Měl by to někdo opravit na:

default:
       Console.WriteLine();
       Console.WriteLine("Neplatná volba, zadejte prosím a/n");
       break;
 
Odpovědět
8.1.2020 23:19
Avatar
Marek Vajčner:7.3.2020 13:37

Díky za další stručnou a jasnou lekci. No jasnou. Uvidíme posléze v testech. ;-)

 
Odpovědět
7.3.2020 13:37
Avatar
Petr Staněk
Člen
Avatar
Petr Staněk:7.3.2020 14:04

Můžu se optat proč je u podmínky na ukončení nebo opakování programu u obou podmínek pro "platnavolba" hodnota nastavena na true? Když změním na false tak po zadaní a potvrzení entrem neprovede žádnou akci a musím entrem znovu potvrdit, což vrací, že jsme zadali neplatnou volbu.

 
Odpovědět
7.3.2020 14:04
Avatar
Odpovídá na Petr Staněk
Marek Vajčner:7.3.2020 14:53

Protože program v tom momentě vyžaduje zmáčknutí buď klávesy "a" pro pokračování nebo klávesy "n" pro ukončení. Obě možnosti jsou korektní, tedy platné.
Proto jsou obě podmínky - platnaVolba = true. Jakákoli jiná klávesa je nekorektní a vypíše se hláška "Neplatná volba, zadejte a/n ".

 
Odpovědět
7.3.2020 14:53
Avatar
Petr Staněk
Člen
Avatar
Odpovídá na Marek Vajčner
Petr Staněk:7.3.2020 15:09

Už jsem na to došel. Jednalo se o to, že pokud byla zadána platnaVolba = false, tak se cykl while stále opakoval. Program tedy došel jakoby o řádek níže while cyklu, ale neměl nic zadané jako předtím a proto musela být stisknuta jiná klávesa. S tím již začal fungovat switch a program šel dále. False tedy u proměnné znemožňoval opustit cyklus.

 
Odpovědět
7.3.2020 15:09
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 149.