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
Fíla N.
Člen
Avatar
Odpovídá na Jirka Kouba
Fíla N.:13.11.2017 22:42

Ahoj,
jak píše DarkCoder, pokud používáš proměnnou typu char, tak tam bys měl mít asi jednozovky :)
Pak ještě vypadá podezřele:
while (repeater = "a") - > to by asi mělo být -> while (repeater == 'a')

 
Odpovědět
13.11.2017 22:42
Avatar
Fíla N.
Člen
Avatar
Odpovídá na Jirka Kouba
Fíla N.:13.11.2017 22:50

Pokračování :)
Jak bych to viděl já:

var repeater = 'a';
while (repeater == 'a')
{
//kalkulačka
Console.Write­Line("Přejete si spočítat další příklad?");
Console.Write­Line("a/n");
repeater = Console.ReadKe­y().KeyChar;
}

Editováno 13.11.2017 22:51
 
Odpovědět
13.11.2017 22:50
Avatar
Petr Zajac
Člen
Avatar
Petr Zajac:21.2.2018 16:55

Díky za další díl.
Sice mi v tom konečném dotazu [a/n] není jasné proč se to převádí na string?
Zkoušel jsem to nechat jako char, jako u volby 1-4, ale pak mi tam při vynechání "ToString()"
ten převod na malá písmenka ToLower() hlásí "Chyba CS1501 Žádné přetížení pro metodu ToLower nepřevezme tento počet argumentů: 0."

 
Odpovědět
21.2.2018 16:55
Avatar
Odpovídá na Petr Zajac
Dušan Kovářík:2.6.2018 19:07

Ahoj, právě proto, že metoda ToLower() pracuje s řetězci, tak je potřeba znak převést na řetězec o délce jednoho znaku. Ano, z hlediska obsahu takovéto proměnné je to to samé, ale z hlediska jejího datového typu je to rozdíl.

 
Odpovědět
2.6.2018 19:07
Avatar
Patrik Herman:11.8.2018 19:03

Zdravím, nevíte jak bych mohl ve své kalkulačce zadat odmocnitel za pomoci int.Parse(Con­sole.ReadLine());?

 
Odpovědět
11.8.2018 19:03
Avatar
Jano Jakab
Člen
Avatar
Jano Jakab:8.9.2018 23:51

Po dvanástich hodinách pokusov a omylov sa mi podarilo ošetriť delenie nulou, tak aby ma kalkulačka nepresviedčala, že to má výsledok. Vždy mi to vypísalo, že výsledok je 0 alebo +nekonečno.
Teraz mi to píše: "Nulou sa nedelí! Neplatná operácia!"
Je to síce len 5 riadkov kódu naviac ale predsa len, nedá sa to spraviť jednoduchšie?

using System;
using System.Collec­tions.Generic;
using System.Linq;
using System.Text;
using System.Threadin­g.Tasks;

namespace Kalkulacka
{
class Program
{
static void Main(string[] args)
{
string varovanie01 = "Toto nie je platný formát čísla! Skús to znovu!";
Console.Write­Line("Vitaj v jednoduchej kalkulačke.");
bool pokracovat = true;
while (pokracovat)
{
Console.Write­Line("Zadaj prvé číslo:");
decimal a;
while (!decimal.Try­Parse(Console­.ReadLine(), out a))
Console.Write­Line(varovani­e01);

Console.Write­Line("Zadaj druhé číslo:");
decimal b;
while (!decimal.Try­Parse(Console­.ReadLine(), out b))
Console.Write­Line(varovani­e01);

Console.Write­Line("Vyber si operáciu:");
Console.Write­Line("1 = sčítanie");
Console.Write­Line("2 = odčítanie");
Console.Write­Line("3 = násobenie");
Console.Write­Line("4 = delenie");

char volba = Console.ReadKe­y().KeyChar;
Console.Write­Line();
decimal vysledok = 0;
bool platnaVolba = true;
switch (volba)
{
case '1':
vysledok = a + b;
break;
case '2':
vysledok = a - b;
break;
case '3':
vysledok = a * b;
break;
case '4':
if (b != 0)
vysledok = a / b;
else
Console.Write­Line("Nulou sa nedelí!");
break;
default:
platnaVolba = false;
break;
}
if ((platnaVolba) && (volba != 4) && (b != 0))
{
Console.Write­Line("Výsledok je: " + vysledok);
}
else
Console.Write­Line("Neplatná operácia!");
Console.Write­Line("Prajete si zadať ďalší príklad? [a/n]");

platnaVolba = false;
while (!platnaVolba)
{
switch (Console.Read­Key().KeyChar­.ToString().To­Lower())
{
case "a":
pokracovat = true;
platnaVolba = true;
break;
case "n":
pokracovat = false;
platnaVolba = true;
break;
default:
Console.Write­Line("Neplatná volba, zadajte prosím a/n");
break;
}
}
Console.Clear();
Console.Write­Line();
}
}
}
}

 
Odpovědět
8.9.2018 23:51
Avatar
Odpovídá na Jano Jakab
Neaktivní uživatel:9.9.2018 17:48

Celkem dobrým postupem by bylo používat místo <code>decimal</co­de> <code>double</code> (a místo normálního textu tlačítko pro vložení kódu :-) ) a do výsledku ze začátku dosadit <code>double.NaN</co­de>. Díky tomu bys pak nemusel řešit věci jako <code>platnaVol­ba</code>.

Teď přichází kritika :-):

  • Již zmíněné formátování.
  • Zkusil jsi už s tímhle kódem zadat dělení s nenulovým <code>b</code>?
  • Co název <code>varovani­e01</code>? Nebylo by lepší třeba <code>neplatny­Format</code>?
  • Kdyby kalkulačka běhala v cyklech, dokud nezadáš správně, všude, asi by byl uživatel nadšenější, že nemusí znovu psát čísla.

A teď jen pro motivaci: v objektech a pak (druhá část) tuším v souborech je na tohle skvělé řešení. Ale projdi si to všechno postupně, víc se ti to vyplatí.

Odpovědět
9.9.2018 17:48
Neaktivní uživatelský účet
Avatar
Tomáš Knor
Člen
Avatar
Tomáš Knor:25.11.2018 21:35

z nějakého důvodu mi to ukazuje že to chce v řádku 53 (Console.Write­Line("Výsledek: {0}", vysledek);
tuto závorku } ,ale když jí tam dám tak ní to tam chce furt nevíte jak to mám vyřešít?

Console.Write­Line("Vítejte v kalkulačce");
bool pokracovat = true;
while (pokracovat)
{
//načtení čísel
Console.Write­Line();
Console.Write­Line("Zadejte první číslo:");
float a;
while (!float.TryPar­se(Console.Re­adLine(), out a))
Console.Write­Line("Neplatné číslo, zadejte prosím znovu:");
Console.Write­Line("Zadejte druhé číslo:");
float b;
while (!float.TryPar­se(Console.Re­adLine(), out b))
Console.Write­Line("Neplatné číslo, zadejte prosím znovu:");
// volba operace a výpočet
Console.Write­Line("Zvolte si operaci:");
Console.Write­Line("1 - sčítání");
Console.Write­Line("2 - odčítání");
Console.Write­Line("3 - násobení");
Console.Write­Line("4 - dělení");
char volba = Console.ReadKe­y().KeyChar;
Console.Write­Line();
float vysledek = 0;
bool 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;
}
if ((platnaVolba) && ((volba > 0) && (volba < 5))) ;
Console.Write­Line("Výsledek: {0}", vysledek);

else
Console.Write­Line("Neplatná volba");
Console.Write­Line("Přejete si zadat další příklad? [a/n]");
// dotaz na pokračování
platnaVolba = false;
while (!platnaVolba)
{
switch (Console.Read­Key().KeyChar­.ToString().To­Lower())
{
case "a":
pokracovat = true;
platnaVolba = true;
break;
case "n":
pokracovat = false;
platnaVolba = true;
break;
default:
Console.Write­Line("Neplatná volba, zadejte prosím [a/n]");
break;
}
}
} Console.Write­Line();
Console.Write­Line("Děkuji za použití kalkulačky, aplikaci ukončíte libovolnou klávesou.");
Console.ReadKey();

 
Odpovědět
25.11.2018 21:35
Avatar
Odpovídá na Tomáš Knor
Neaktivní uživatel:25.11.2018 21:42

Středník za <code>if</code>.

Odpovědět
25.11.2018 21:42
Neaktivní uživatelský účet
Avatar
Tomáš Knor
Člen
Avatar
Odpovídá na Neaktivní uživatel
Tomáš Knor:25.11.2018 22:01

Díky jsem začátečník a už jsem se s tím trápil dost dlouho.

 
Odpovědět
25.11.2018 22:01
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.