5. diel - Načítanie hodnôt z konzoly a parsovania v C# .NET Nové
V minulej lekcii, Využitie umelej inteligencie pri štúdiu programovania, sme si ukázali, ako využívať umelú inteligenciu pri štúdiu programovania.
V dnešnom C# .NET tutoriále sa pozrieme na parsovanie hodnôt z konzoly. Výsledkom bude niekoľko jednoduchých programov vrátane kalkulačky.
Program Papagáj
Skúsme do programu zapojiť používateľov a nejako reagovať na jeho vstup. Napíšeme program Papagáj, ktorý bude dvakrát opakovať to, čo používateľ napísal.
Načítanie textu z konzoly
Ešte sme neskúšali z konzoly nič načítať, ale je to veľmi
jednoduché. Slúži na to metóda ReadLine(), ktorá nám vráti
textový reťazec z konzoly. Skúsme si napísať nasledujúci kód:
{CSHARP_CONSOLE}
Console.WriteLine("Ahoj, som virtuálny papagáj Lóra, rád opakujem!");
Console.WriteLine("Napíš niečo: ");
string vstup;
vstup = Console.ReadLine();
string vystup;
vystup = vstup + ", " + vstup + "!";
Console.WriteLine(vystup);
Console.ReadKey();
{/CSHARP_CONSOLE}
Nové projekty v C# takto podčiarkujú príkaz
Console.ReadLine():

Príkaz Console.ReadLine() pri priradení výsledku príkazu do
typu string vyvolá varovanie, že príkaz môže vrátiť
null. Ideálne by sme sa mali pýtať, či sa nevrátil prázdny
výsledok. Keďže sa to ale nikdy nestane, môžeme varovanie buď ignorovať
alebo za príkaz Console.ReadLine() napísať výkričník, teda
Console.ReadLine()!:

To už je trochu zábavnejšie:) Prvé dva riadky sú jasné, ďalej
deklarujeme textový reťazec vstup. Do vstup sa
priradí hodnota z metódy ReadLine() na konzole, teda to, čo
používateľ zadal. Pre výstup si pre názornosť zakladáme ďalšiu
premennú typu textový reťazec. Zaujímavé je to, ako pre výsledok premennej
vystup využívame tzv. konkatenáciu (spájanie) reťazcov.
Pomocou operátora + totiž môžeme spojiť niekoľko textových
reťazcov do jedného a je jedno, či je reťazec v premennej, alebo je
explicitne zadaný v úvodzovkách do zdroja. kódu. Do premennej teda
priradíme vstup, ďalej čiarku, znovu vstup a potom
výkričník. Premennú vypíšeme, vyčkáme na stlačenie klávesy a
skončíme:
Konzolová aplikácia
Ahoj, som virtuálny papagáj Lóra, rád opakujem!
Napíš niečo:
Nazdar vtáka
Nazdar vtáka, Nazdar vtáka!
Do premennej môžeme priraďovať už v jej deklarácii, môžeme teda napísať:
string vstup;
vstup = Console.ReadLine();
Pôvodný zápis je možné skrátiť takto:
string vstup = Console.ReadLine();
Program by šiel skrátiť ešte viac v mnohých ohľadoch. Všeobecne je ale lepšie používať viac premenných a dodržiavať prehľadnosť ako písať čo najkratší kód a po mesiaci zabudnúť, ako vôbec funguje.
Program Zdvojnásobovač
Zdvojnásobovač si vyžiada na vstupe číslo a to potom vynásobí hodnotou
2 a vypíše. S doterajšími znalosťami by sme asi napísali
niečo také:
Console.WriteLine("Zadajte číslo na zdvojnásobenie:"); int a = Console.ReadLine(); a = a * 2; Console.WriteLine(a); Console.ReadKey();
Všimnite si vynásobenie čísla a, ktoré sme vykonali pomocou
priradenia. C# nám teraz vyhubuje a podčiarkne riadok, v ktorom sa snažíme
hodnotu z konzoly dostať do premennej typu int. Narážame na
typovú kontrolu, konkrétne nám ReadLine() vracia
string a my sa ho snažíme uložiť do int.
Čokoľvek príde z textovej konzoly, je vždy text, a to aj keď zadáme
číslo. Budeme ho potrebovať tzv. naparzovať.
Parsovanie
Parsovaním sa myslí prevod z textovej podoby na nejaký špecifický typ,
napr. číslo. Mnoho dátových typov v C# má už pripravené metódy na
parsovanie. Pokiaľ budeme chcieť naparsovať napr. int zo
string, budeme postupovať takto:
string s = "56"; int a = int.Parse(s);
Vidíme, že dátový typ int má na sebe priamo metódu
Parse(), ktorá ako parameter berie textový reťazec a vráti
číslo. Využijeme túto znalosť v našom programe:
{CSHARP_CONSOLE}
Console.WriteLine("Zadajte číslo na zdvojnásobenie:");
string s = Console.ReadLine();
int a = int.Parse(s);
a = a * 2;
Console.WriteLine(a);
Console.ReadKey();
{/CSHARP_CONSOLE}
Najprv si text z konzoly uložíme do textového reťazca s. Do
celočíselnej premennej a potom uložíme číselnú hodnotu
reťazca s. Ďalej hodnotu v a vynásobíme hodnotou
2 a vypíšeme do konzoly:
Konzolová aplikácia
Zadajte číslo na zdvojnásobenie:
1024
2048
Môžete sa stretnúť s parsovaním zo string
pomocou triedy Convert, tá však slúži na konverziu medzi
číslami as textom si nemusí správne poradiť, je to teda zlé riešenie.
Parsovanie sa samozrejme nemusí podariť, keď bude v texte namiesto čísla napr. "slovo", ale tento prípad zatiaľ nebudeme ošetrovať.
Jednoduchá kalkulačka
Ešte sme nepracovali s desatinnými číslami, skúsme si teda napísať sľubovanú kalkulačku. Bude veľmi jednoduchá, na vstup prídu dve čísla, program potom vypíše výsledky pre sčítanie, odčítanie, násobenie a delenie:
{CSHARP_CONSOLE}
Console.WriteLine("Vitajte v kalkulačke");
Console.WriteLine("Zadajte prvé číslo:");
float a = float.Parse(Console.ReadLine());
Console.WriteLine("Zadajte druhé číslo:");
float b = float.Parse(Console.ReadLine());
float soucet = a + b;
float rozdil = a - b;
float soucin = a * b;
float podil = a / b;
Console.WriteLine("Súčet: " + soucet);
Console.WriteLine("Rozdiel: " + rozdil);
Console.WriteLine("Súčin: " + soucin);
Console.WriteLine("Podiel: " + podil);
Console.WriteLine("Ďakujem za použitie kalkulačky, aplikáciu ukončíte ľubovoľným klávesom.");
Console.ReadKey();
{/CSHARP_CONSOLE}
Výstup:
Konzolová aplikácia
Vitajte v kalkulačke
Zadajte prvé číslo:
3,14
Zadajte druhé číslo:
2,72
Súčet: 5,86
Rozdiel: 0,42
Súčin: 8,5408
Podiel: 1,15441176470588
Ďakujem za použitie kalkulačky, aplikáciu ukončíte ľubovoľným klávesom.
Všimnime si dve veci. Po prvé sme zjednodušili parsovanie z konzoly tak,
aby sme nepotrebovali stringovú premennú, pretože by sme ju aj tak už potom
nepoužili. Po druhé, na konci programu spájame reťazec s číslom pomocou
operátora +. C# prekvapivo nezahlási chybu, ale vykoná tzv.
implicitnú konverziu a zavolá na čísle metódu
ToString(). Keby tomu tak nebolo alebo keby sme sa
dostali do situácie, keď potrebujeme previesť čokoľvek na
string, zavoláme na premenné metódu ToString(). C#
to v tomto prípade urobil za nás, v podstate vykoná:
Console.WriteLine("Súčet: " + soucet.ToString());
Práve sme sa teda naučili opak parsovania – previesť čokoľvek do textovej podoby.
Operátor nameof
Niekedy sa nám môže hodiť získať namiesto hodnoty premennej jej názov.
Slúži na to operátor nameof:
int cislo = 5; Console.WriteLine(nameof(cislo));
Výstup:
Konzolová aplikácia
cislo
Môžeme si vyskúšať, že program naozaj nevypíše päťku, ale
cislo.
Všetky programy máte samozrejme v prílohe, skúšajte si vytvárať
nejaké podobné, znalosti už k tomu máte 
Zhrnutie lekcie
Vstup z konzoly sa v C# načíta pomocou Console.ReadLine().
Keď chceme zo zadaného textu získať číslo, musíme ho previesť pomocou
parsovania, napríklad int.Parse() alebo
float.Parse(). Reťazce je možné spájať pomocou +
a C# vie pri výpise sama previesť číslo na text. Na týchto základoch
vznikli jednoduché programy ako papagáj, zdvojnásobovač a kalkulačka so
základnými početnými operáciami.
V nasledujúcom cvičení, Riešené úlohy k 1.-4. lekcii C# .NET, si precvičíme nadobudnuté skúsenosti z predchádzajúcich lekcií.
Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 0x (67.22 kB)
Aplikácia je vrátane zdrojových kódov v jazyku C#

David sa informačné technológie naučil na