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
Dennis Pohludka:15.4.2022 21:39

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

 
Odpovědět
15.4.2022 21:39
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.

 
Odpovědět
7.8.2022 17:49
Avatar
DarkCoder
Člen
Avatar
Odpovídá 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ší.

Odpovědět
7.8.2022 19:37
"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í :)

 
Odpovědět
14.8.2022 22:27
Avatar
Odpovídá 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).

 
Odpovědět
29.11.2022 15:40
Avatar
Odpovídá 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 ;-)
 
Odpovědět
29.11.2022 15:50
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!

 
Odpovědět
15.1.2023 18:37
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;

                 }

             }



         }
 
Odpovědět
16.1.2023 0:07
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();
}
 
Odpovědět
4.3.2023 18:20
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();
}
 
Odpovědět
8.3.2023 11:56
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.