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
Honza
Člen
Avatar
Honza:21.11.2012 17:54

ahoj,
napadlo mě ještě udělat aby když zadáme špatnou volbu operace, aby nám to dalo znova na výběr a neskončili jsme rovnou u zadávání nového příkladu. Chtěl jsem to udělat pomocí

While (!platnaVolba)

, ale narazil jsem na problem protoze jeste pred tim loopem nastavujeme platnaVolba na true, takze by se to nespustilo ani jednou. Jak by to teoreticky šlo udělat, pomocí znalostí, které méme do této lekce?

 
Odpovědět
21.11.2012 17:54
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Honza
matesax:21.11.2012 18:10
float vysledek = 0;

while (vysledek == 0)
    switch (Console.ReadKey().KeyChar)
    {
        case '1':
            vysledek = a + b;
            break;
        case '2':
            vysledek = a - b;
            break;
        case '3':
            vysledek = a * b;
            break;
        case '4':
            vysledek = a / b;
            break;
        default:
            Console.WriteLine("Neplatná volba, zadejte prosím novou.");
            break;
    }

Console.WriteLine("Výsledek: {0}", vysledek);
 
Odpovědět
21.11.2012 18:10
Avatar
Theodor Johnson
Tvůrce
Avatar
Odpovídá na matesax
Theodor Johnson:21.11.2012 18:13

Ale tam by bylo potřeba ošetřit aby třeba a != 0, b != 0

 
Odpovědět
21.11.2012 18:13
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Theodor Johnson
matesax:21.11.2012 18:18

Nač? Leda tak dělení hodit do try:

try
{
    vysledek = a / b;
}
catch (Exception e)
{
    Console.WriteLine(e.Message);
}
 
Odpovědět
21.11.2012 18:18
Avatar
Theodor Johnson
Tvůrce
Avatar
Theodor Johnson:21.11.2012 18:20

Vždť by se ti to zacyklilo, 0 + 0 = 0, vysledek by byl pořád 0

 
Odpovědět
21.11.2012 18:20
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Honza
David Hartinger:21.11.2012 18:30
bool platnaVolba = false;
while (!platnaVolba)
{
        platnaVolba = true;
        switch (volba)
        {
                case '1':
                        vysledek = a + b;
                        break;
                case '2':
                        vysledek = a - b;
                        break;
                case '3':
                        vysledek = a * b;
                        break;
                case '4':
                        vysledek = a / b;
                        break;
                default:
                        platnaVolba = false;
                        break;
        }
}

Snad to je dobře. Případně použít cyklus do...while, ale ten tu nebyl zmíněn.

Odpovědět
21.11.2012 18:30
New kid back on the block with a R.I.P
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Honza
David Hartinger:21.11.2012 18:40

Jo, samozřejmě si tam přidej to znovunačtení volby a nějaký text, to jistě zvládneš :)

Odpovědět
21.11.2012 18:40
New kid back on the block with a R.I.P
Avatar
matesax
Tvůrce
Avatar
matesax:21.11.2012 19:31

Já bych tam dal ještě 60 -... (Veliký problém to je. :) )

string vysledek = "";

while (String.IsNullOrEmpty(vysledek))
    switch (Console.ReadKey().KeyChar)
    {
        case '1':
            vysledek += a + b;
            break;
        case '2':
            vysledek += a - b;
            break;
        case '3':
            vysledek += a * b;
            break;
        case '4':
            try
            {
                vysledek += a / b;
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            break;
        default:
            Console.WriteLine("Neplatná volba, zadejte prosím novou.");
            break;
    }

Console.WriteLine("Výsledek: {0}", vysledek);
Editováno 21.11.2012 19:34
 
Odpovědět
21.11.2012 19:31
Avatar
samo007
Tvůrce
Avatar
Odpovídá na David Hartinger
samo007:8.2.2013 8:05

Našiel som malý nedostatok. Asi by príklad vyzer lepšie ak by bolo (na konci) pred

Console.WriteLine("Neplatná volba, zadejte prosím a/n");
Console.WriteLine ()

Aby sa nezlučoval zadaný znak s vetou.

 
Odpovědět
8.2.2013 8:05
Avatar
ondrakucera
Člen
Avatar
ondrakucera:23.2.2013 21:38

Taky mě napadlo že to že nás špatná volba operace vrátí na začátek není úplně ok a tak jsem to vyřešil takhle. Možná je to o něco složitější než tady ve fóru naznačil sdraco ale zase se o špatné volbě uživatel dozví hned jak jí zadá...

//deklarace proměnných
float a=0, b=0, c=0;
bool pokracovat=true;

Console.WriteLine("Vítejte v mojí kalkulačce!");
//začátek kalkulačky
while (pokracovat)
{
    //zadání a kontrola prvního čísla
    Console.WriteLine("Zadej první číslo: ");
    while (!float.TryParse(Console.ReadLine(), out a))
        Console.WriteLine("Zadali jste špatné číslo, zkuste to znovu: ");
    //zadání a kontrola operace
    Console.WriteLine("Zadej volbu (+;-;*;/): ");
    char volba = Console.ReadKey().KeyChar;
    while (!(volba == '+' || volba == '-' || volba == '*' || volba == '/'))
    {
        Console.WriteLine();
        Console.WriteLine("Zadali jste špatnou volbu, zkuste to znovu: ");
        volba = Console.ReadKey().KeyChar;
    }
    Console.WriteLine();
    //zadání a kontrola druhého čísla
    Console.WriteLine("Zadej druhé číslo: ");
    while (!float.TryParse(Console.ReadLine(), out b))
        Console.WriteLine("Zadali jste špatné číslo, zkuste to znovu: ");
    //volba operace podle zadání uživatele
    switch (volba)
    {
        case '+':
            c = a + b;
            break;
        case '-':
            c = a - b;
            break;
        case '*':
            c = a * b;
            break;
        case '/':
            c = a / b;
            break;
    }
    //výpis výsledku
    Console.WriteLine("Výsledek je: {0}", c);
    //dotaz zda li chce uživatel pokračovat v práci + kontrola vstupu
    Console.WriteLine("Chcete pokračovat? [a/n]");
    bool platnaVolba = false;
    while(!platnaVolba)
        switch (Console.ReadKey().KeyChar.ToString().ToLower())
        {
            case "a":
                platnaVolba=true;
                pokracovat=true;
                break;
            case "n":
                platnaVolba=true;
                pokracovat=false;
                break;
            default:
                Console.WriteLine();
                Console.WriteLine("Špatná volba! Zadejte prosím A/N");
                break;
        }


    Console.WriteLine();
}

David Hartinger

 
Odpovědět
23.2.2013 21:38
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.