FINÁLNY VÝPREDAJ KREDITOV na ITnetwork je tu. Využi poslednú šancu a získaj až 80 % extra kreditov ZADARMO na náš interaktívny e-learning. Zisti viac:
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

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:

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();

Nové projekty v C# takto podčiarkujú príkaz Console.ReadLine():

Varovanie null_console.readline - Základná konštrukcia jazyka C# .NET - Základná konštrukcia jazyka C# .NET

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()!:

Riešenie null_console.readline - Základná konštrukcia jazyka C# .NET - Základná konštrukcia jazyka C# .NET

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:

Console.WriteLine("Zadajte číslo na zdvojnásobenie:");
string s = Console.ReadLine();
int a = int.Parse(s);
a = a * 2;
Console.WriteLine(a);
Console.ReadKey();

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:

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();

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#

 

Predchádzajúci článok
Využitie umelej inteligencie pri štúdiu programovania
Všetky články v sekcii
Základná konštrukcia jazyka C# .NET
Preskočiť článok
(neodporúčame)
Riešené úlohy k 1.-4. lekcii C# .NET
Článok pre vás napísal David Hartinger
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David sa informačné technológie naučil na Unicorn University - prestížnej súkromnej vysokej škole IT a ekonómie.
Aktivity