IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Diskusia – 7. 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
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?

 
Odpovedať
21.11.2012 17:54
Avatar
matesax
Tvůrce
Avatar
Odpovedá 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);
 
Odpovedať
21.11.2012 18:10
Avatar
Theodor Johnson
Tvůrce
Avatar
Odpovedá 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

Odpovedať
21.11.2012 18:13
Mo8ilε 15 Ѐλđ
Avatar
matesax
Tvůrce
Avatar
Odpovedá 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);
}
 
Odpovedať
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

Odpovedať
21.11.2012 18:20
Mo8ilε 15 Ѐλđ
Avatar
David Hartinger
Vlastník
Avatar
Odpovedá 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.

Odpovedať
21.11.2012 18:30
New kid back on the block with a R.I.P
Avatar
David Hartinger
Vlastník
Avatar
Odpovedá 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š :)

Odpovedať
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);
Editované 21.11.2012 19:34
 
Odpovedať
21.11.2012 19:31
Avatar
samo007
Tvůrce
Avatar
Odpovedá 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.

 
Odpovedať
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

 
Odpovedať
23.2.2013 21:38
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.

Zatiaľ nikto nevložil komentár - buď prvý!