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 – 8. diel - Ošetrenie užívateľských vstupov v C# .NET

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
Posledné komentáre sú na spodnej časti poslednej stránky.
Avatar
Dennis Pohludka:15.4.2022 21:39

Přijde mi nedostatečně vysvětleny některé použití metody

Avatar
nrgpostsk
Člen
Avatar
nrgpostsk:7.8.2022 17:49

vcelku dobry, jen dovysvetlit to while a negovani by pomohlo zbytecne jsem nad tim tapal a z aktualniho vysvetleni mi to nebilo prilis jasne. Ale i tak dekuji za dalsi skvelou lekci.

Avatar
DarkCoder
Člen
Avatar
Odpovedá na nrgpostsk
DarkCoder:7.8.2022 19:37

V předešlých lekcích bylo vše dostatečně vysvětleno. V kapitole 5 bylo uvedeno jak měnit hodnotu výrazu pomocí logického operátoru !. V kapitole 6 bylo uvedeno jak funguje cyklus while. I ve zdejším tutoriálu je uvedeno, proč byl přidán operátor ! před výraz. Jednoduše, výraz je to co je uvnitř příkazů jako je od nebo while. Pro provedení příkazu se testuje na to zda výraz je pravdivý. Nenulový true, nulový false. Pomocí logického operátoru tak lze otočit podmínku příkazu. Se vzrůstajícím počtem příkladů, které si na toto téma uděláš, ti to bude postupně jasnější.

Odpovedať
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Marek Němec
Člen
Avatar
Marek Němec:14.8.2022 22:27

Ahoj, chtěl bych se zeptat jestli tato část kódu

Console.ReadKey().KeyChar.ToString().ToLower()

Nejde zkrátit na:

Console.ReadKey().ToString().ToLower()

Ve VS mi to normálně funguje ale nevím jestli to nemá nějaký význam do budoucna.
Děkuji za přečtení :)

Avatar
Odpovedá na Marek Němec
Jiří Vojtíšek Vepřek:29.11.2022 15:40

KeyChar - znamená, že provedeš volbu jedním znakem, tzn. jednou klávesou ve switchi. Pokud tam nedáš KeyChar a dáš si v case 1 volbu "když napíšu tenhle text přesně jako tady tak se něco stane" , tak se ta operace z daného case provede pouze pokud napíšeš ten text přesně takto a potom odentruješ a keychar tím pádem nepoužiješ nepoužiješ. Zde je ve switchi volba jedním znakem "a" nebo "n" - tzn. KeyChar (volba stiskem jedné klávesy s příslušným znakem).

Avatar
Odpovedá na Lukáš
Jiří Vojtíšek Vepřek:29.11.2022 15:50
  1. KeyChar je zadání v ovládání (v tomto případě switch) jedním stiskem dané klávesy (bez potvrzování enterem) tzn. provede se po stisknutí a nebo n
  2. úplně jednoduše. Default v cyklu se provede proto, že se cyklus spustí čekáním na vstup uživatele. Pokud zadáš jiný znak než "a", nebo "n" tak se provede defaultní výstup, protože výchozí hodnota platnevolby je právě false. Pokud znak zadáš správně (keycharem), spustí se daný case. Tím máš jednoduše ošetřeno, 2 správné vstupy a když někdo zmáčkne něco jiného, což je jednodušší, než vypisovat case na všechny chybné vstupy ;-)
Avatar
Martin Pěnička:15.1.2023 18:37

Děkuji, u Keychar jsem to potřeboval vědět. Prosím o přidání dodatku ohledně Keychar do článku. Děkuji!

Avatar
Martin Pěnička:16.1.2023 0:07

Trochu jsem to vylepšil, na defaultu u druhé switch chyběl ještě platnaVolba = false;

while (continue__)
         {
             Console.WriteLine("Zadejte první číslo:");
             float a;
             while(!float.TryParse(Console.ReadLine(), out a))
             {
                 Console.WriteLine("Neplatné číslo, zadejte, prosím znovu:");
             }
             Console.WriteLine("Zadejte druhé číslo:");
             float b;
             while(!float.TryParse(Console.ReadLine(), out b))
             {
                 Console.WriteLine("Neplatné číslo, zadejte, prosím znovu:");
             }

             Console.WriteLine("Zvolte si operaci:");
             Console.WriteLine("1 - sčítání");
             Console.WriteLine("2 - odčítání");
             Console.WriteLine("3 - násobení");
             Console.WriteLine("4 - dělení");

             Console.WriteLine();
             char choose = Console.ReadKey().KeyChar;
             Console.WriteLine();

             bool validChoice = true;
             float result = 0;

             switch (choose)
             {
                 case '1':
                     result = a + b;
                     break;
                 case '2':
                     result = a - b;
                     break;
                 case '3':
                     result = a * b;
                     break;
                 case '4':
                     result = a / b;
                     break;
                 default:
                     validChoice = false;
                     break;
             }
             if (validChoice) // Pokud je volba platná
             {
                 Console.WriteLine("Výsledek je: {0}", result);
             }
             else
             {
                 Console.WriteLine("Neplatná volba!");
             }

             Console.WriteLine("Přejete si pokračovat? [a/n]");

             // Vytvoříme dotaz na pokračování
             validChoice = false;
             while (!validChoice)
             {
                 switch (Console.ReadKey().KeyChar.ToString().ToLower())
                 {
                     case "a":
                         continue__ = true;
                         validChoice = true;
                         Console.Clear();
                     break;

                     case "n":
                         continue__ = false;
                         validChoice = true;
                     break;

                     default:
                         Console.WriteLine();
                         Console.WriteLine("Neplatná volba. Zadejte, prosím volbu! [a/n]");
                         validChoice = false;
                     break;

                 }

             }



         }
Avatar
Lumír Latzka:4.3.2023 18:20

Ahoj,
pokusil jsem se lekci aplikovat, abych se vždy mohl rozhodnout na konci programu, jestli chci pokračovat nebo nepokračovat případně v defaultu, aby mě to vrátilo k novému zadání.
V přiloženém kódu funguje jenom pokračování, protože proměnná "dalsi" je vždy true.
Pokoušel jsem se to vyřešit vložením if a u příkazu switch byla proměnná c (viz. níže), ale nefunguje mi to. Jak bys to řešil? Předem děkuji.

string c = (Console.Read­Key().KeyChar­.ToString().To­Lower());
if (c == "a")
dalsi = true;
else
dalsi = false;

bool dalsi = true;
while (dalsi)
{
    Console.WriteLine("zadej počet");
    int kolik;
    while (!int.TryParse(Console.ReadLine(), out kolik))
        Console.WriteLine("zadej celé číslo");
    for (int i = 1; i <= kolik; i++)
    {
        if (i != 2)
            Console.WriteLine("různé od dvou");
        else
            Console.WriteLine("rovno dvěma");
    }
    Console.WriteLine("chceš pokračovat a/n");
    dalsi = false;
    while(!dalsi)
    {
        switch(Console.ReadKey().KeyChar.ToString().ToLower())
        {
            case "a":
                dalsi = true;
                break;
            case "n":
                dalsi = false;
                break;
            default:
                Console.WriteLine();
                Console.WriteLine("zadej a/n");
                break;
        }
    }
    Console.WriteLine();
}
Avatar
Lumír Latzka:8.3.2023 11:56

Ahoj,
podařilo se mi to vyřešit, nicméně to není super antiblcec. Když podruhé spletu default "Zadej a/n" pustí mě to do první části programu, aniž by trval na zadáni písmene "a" nebo "n". Uživateli by se to asi nelíbilo.

bool dalsi = true;
while (dalsi)
{
    Console.WriteLine("zadej počet");
    int kolik;
    while (!int.TryParse(Console.ReadLine(), out kolik))
        Console.WriteLine("zadej celé číslo");
    for (int i = 1; i <= kolik; i++)
    {
        if (i != 2)
            Console.WriteLine("různé od dvou");
        else
            Console.WriteLine("rovno dvěma");
    }
        Console.WriteLine("chceš pokračovat a/n");
        string c = (Console.ReadKey().KeyChar.ToString().ToLower());
        switch (c)
        {
            case "a":
                dalsi = true;
                break;
            case "n":
                dalsi = false;
                break;
            default:
                {
                    Console.WriteLine();
                    Console.WriteLine("zadej a/n");
                    Console.ReadKey();
                    break;
                }
        }
    Console.WriteLine();
}
Posledné komentáre sú na spodnej časti poslednej stránky.
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 149.