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
Ľubomír Prokopovič:8.7.2014 15:41

ja som cely switch upravil pomocou fcie goto. nie je to takto jednoduchsie?

Znova:
                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í");
                int volba = int.Parse(Console.ReadLine());
                float vysledok = 0;
                switch (volba)
                {
                    case 1:
                        vysledok = a + b;
                        break;

                    case 2:
                        vysledok = a - b;
                        break;

                    case 3:
                        vysledok = a * b;
                        break;

                    case 4:
                        vysledok = a / b;
                        break;

                    default:
                        Console.WriteLine("Zle zadanie. Skuste znova.");
                        goto Znova;
Odpovědět
8.7.2014 15:41
"Počítače jsou jako Bůh ve Starém zákoně - hodně příkazů a žádné slitování." Joseph Campbell
Avatar
Ľubomír Prokopovič:8.7.2014 15:50

Teraz som si vsimol ze znaky to nebere

Odpovědět
8.7.2014 15:50
"Počítače jsou jako Bůh ve Starém zákoně - hodně příkazů a žádné slitování." Joseph Campbell
Avatar
Ľubomír Prokopovič:8.7.2014 18:41

Vedel by mi niekto vysvetlit tuto cast kodu? som sa v tom nejak stratil. Preco menime platnaVolba na false?

platnaVolba = false;
                while(!platnaVolba)
                {
                    switch (Console.ReadKey().KeyChar.ToString().ToLower())
                    {
                        case"a":
                            pokracovat = true;
                            platnaVolba = true;
                            break;

                        case"n":
                            pokracovat = false;
                            platnaVolba = true;
                            break;
                        default:
                            Console.WriteLine("Neplatna volba zadajte volbu znova [a/n]");
                            break;
                    }
Odpovědět
8.7.2014 18:41
"Počítače jsou jako Bůh ve Starém zákoně - hodně příkazů a žádné slitování." Joseph Campbell
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Ľubomír Prokopovič
Jan Vargovský:8.7.2014 20:02

Dokud nezadáš 'a' nebo 'n' tak se vždycky načte znak, převede na string a popřípadě změní na malé. Ono to jde napsat i takhle:

char.ToLower(Console.ReadKey())

Nevím proč to tu je tak složitě. Pak by jsi jen neswitchoval string ale char.

 
Odpovědět
8.7.2014 20:02
Avatar
Ľubomír Prokopovič:8.7.2014 21:08

aha jasne dik :) Len este jedna otazka: preco sa tam meni platbaVolba na false a cely switch sa este dava do while cyklu? ked som ten while cyklus vymazal tak to funguje tak isto ci sa mylim?

Odpovědět
8.7.2014 21:08
"Počítače jsou jako Bůh ve Starém zákoně - hodně příkazů a žádné slitování." Joseph Campbell
Avatar
Sub zero z mortal combat :9.8.2014 18:34

A co tohle! je to asi krapet delší ale taky to faká , kdyby šlo pořešit že by volba zůstala .int jenže tam je problém právě u klávesnice ..pokud uživatel zadá string tak se to zblázní a to neumím ošetřit aby to nezmagořilo.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Maple_hadra
    {
        static void Main(string[] args)
        {
            char pokracovat = 'a';
            Console.WriteLine("Vítejte v programu Maple hadra v 2.3");
            Console.WriteLine("V2.3- ošetřeny vstupy od uživatele");
            while (pokracovat == 'a')
            {

                Console.WriteLine("Ze seznamu vyberte operaci kterou chcete provést");
                Console.WriteLine("sečtení dvou čísel :1");
                Console.WriteLine("odečtení dvou čísel:2");
                Console.WriteLine("násobení dvou čísel:3");
                Console.WriteLine("dělení dvou čísel:4");
                Console.WriteLine("mocnina čísla:5");
                Console.WriteLine("odmocnina čísla:6");
                char volba = Console.ReadKey().KeyChar;
                double vysledek = 0;
                if ((volba == '1') || (volba == '2') || (volba == '3') || (volba == '4'))
                {
                    Console.WriteLine("Zadejte první číslo");
                    double prvni;
                    while (!double.TryParse(Console.ReadLine(), out prvni)) /*ošetření vstupu */
                        Console.WriteLine("Neplatné číslo, zadejte prosím znovu:");
                    Console.WriteLine("Zadejte druhé číslo");
                    double druhe;
                    while (!double.TryParse(Console.ReadLine(), out druhe)) /*ošetření vstupu */
                        Console.WriteLine("Neplatné číslo, zadejte prosím znovu:");
                    switch (volba)
                    {
                        case '1':
                            vysledek = prvni + druhe;
                            break;
                        case '2':
                            vysledek = prvni - druhe;
                            break;
                        case '3':
                            vysledek = prvni * druhe;
                            break;
                        case '4':
                            vysledek = prvni / druhe;
                            break;
                    }
                 Console.WriteLine("Vysledek je {0}", vysledek);
                }
                else if ((volba == '5') || (volba == '6'))
                {
                    Console.WriteLine("Zadejte číslo");
                    double prvni = double.Parse(Console.ReadLine());
                    switch (volba)
                    {
                        case '5':
                            vysledek = prvni * prvni;
                            break;
                        case '6':
                            vysledek = Math.Sqrt(prvni);
                            break;
                    }
                    Console.WriteLine("Vysledek je {0}", vysledek);
                }

                else
                {
                    Console.WriteLine("neplatná volba");
                }
                do
                {
                    Console.WriteLine("Přejete si zadat další příklad? [a/n]");
                    pokracovat = Console.ReadKey().KeyChar;
                }
                while (!((pokracovat == 'n') || (pokracovat == 'a')));
            }
            Console.WriteLine("ZZZAAATTTÍÍÍÍMMM!");
        }

    }

}
 
Odpovědět
9.8.2014 18:34
Avatar
Sub zero z mortal combat :9.8.2014 19:14

blbost tak to šlo i s** int.** :D
a navíc jsem našel ještě jednu chybku které jsem si prvně nevšiml že to jde uživatelem zmršit. No ono toho je ještě víc.... teoreticky pokud někdo zadá mega velké číslo tak se to taky zblázní...ale to už asi opravdu nemá pak smysl řešit.

int volba;
                while (!int.TryParse(Console.ReadLine(), out volba))
                     {
                    Console.WriteLine("Neplatná volba, zadejte prosím znovu:");
                     }
                double vysledek = 0;
                if ((volba >= 1) && (volba <= 4))
                {
                    Console.WriteLine("Zadejte první číslo");
                    double prvni;
                    while (!double.TryParse(Console.ReadLine(), out prvni))
                        Console.WriteLine("Neplatné číslo, zadejte prosím znovu:");
                    Console.WriteLine("Zadejte druhé číslo");
                    double druhe;
                    while (!double.TryParse(Console.ReadLine(), out druhe))
                        Console.WriteLine("Neplatné číslo, zadejte prosím znovu:");
                    switch (volba)
                    {
                        case 1:
                            vysledek = prvni + druhe;
                            break;
                        case 2:
                            vysledek = prvni - druhe;
                            break;
                        case 3:
                            vysledek = prvni * druhe;
                            break;
                        case 4:
                            vysledek = prvni / druhe;
                            break;
                    }
                 Console.WriteLine("Vysledek je {0}", vysledek);
                }
                else if ((volba == 5) || (volba == 6))
                {
                    Console.WriteLine("Zadejte číslo");
                    double prvni;
                        while (!double.TryParse(Console.ReadLine(), out prvni))
                        Console.WriteLine("Neplatné číslo, zadejte prosím znovu:");
                    switch (volba)
                    {
                        case 5:
                            vysledek = prvni * prvni;
                            Console.WriteLine("Vysledek je {0}", vysledek);
                            break;
                        case 6:
                            {
                            if (prvni >= 0)
                                {
                                    vysledek = Math.Sqrt(prvni);
                                    Console.WriteLine("Vysledek je {0}", vysledek);
                                }
                            else
                                Console.WriteLine("Při odmocňování musí být číslo větší nebo alespoň rovno 0");
                            break;
                            }
Editováno 9.8.2014 19:14
 
Odpovědět
9.8.2014 19:14
Avatar
Sub zero z mortal combat :9.8.2014 19:22

A teď jedna otázka trochu mimo mísu , celkem mi to trvalo než jsem udělal tu variantu jedna páč sem nevěděl jak ve visual express 2010 sledovat proměnné krok po kroku , vím že to nějak jde, ale zatím jsem na to nepřišel , chvíli jsem googlil ale asi špatně...Poradí mi někdo?

 
Odpovědět
9.8.2014 19:22
Avatar
D0ll0k
Člen
Avatar
Odpovídá na Ľubomír Prokopovič
D0ll0k:13.8.2014 17:54

Protože, když se tě kalkulačka na konci zeptá, jestli chceš zadat nový příklad a ty dáš "a", tak po druhém příkladu se tě nezeptá, ale jede znova. Protože podmínka u while cyklu je neplatná. Kvůli tomu tam musí být: "platnaVolba = false;" ,aby jsi mohl znova zadat "a" nebo "n".

Odpovědět
13.8.2014 17:54
Veni, vidi, programmato
Avatar
D0ll0k
Člen
Avatar
D0ll0k:13.8.2014 17:59

Akorát to má jeden háček. Jakmile zadáš špatně operaci, musíš znova zadat celý příklad. Stačilo by dát WHILE, IF a ELSE do while cyklu. Jinak super tutoriály :)

Editováno 13.8.2014 18:00
Odpovědět
13.8.2014 17:59
Veni, vidi, programmato
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.