10. Zjednodušený příkaz vstupu

Pro další výklad budeme potřebovat znát princip, jak jednoduše přečteme data z klávesnice. Tyto jednoduché vstupní operace budeme provádět pomocí konzole.

Hodnoty se do programu zadávají různým způsobem – nejčastěji pomocí vstupního zařízení naplníme určité proměnné např. klávesnice počítače, čtecí zařízení, import ze souboru apod. Při plnění proměnné bychom měli dodržet zásady: vstupní seznam nesmí být prázdný a v seznamu mohou být pouze jména proměnných, které mají být naplněny (nesmí to být např. konstanta nebo jiný výraz. Hodnota konstanty se v průběhu algoritmu nemění a nemusí mít vždy jen číselnou hodnotu).


Načtení textu

Pro demonstraci principu načtení hodnoty z klávesnice do proměnné využijeme již dříve vytvořený algoritmus, který je modifikací základního algoritmu HelloWorld.


Ilustrativní příklad HelloWorldNacteni
Algoritmus HelloWorldNacteni


Na základě vývojového diagramu HelloWorldNacteni vytvoříme v konzolové aplikaci program, na kterém si vysvětlíme základní příkaz vstupu.

Program HelloWorldNacteni
  • Popis: Program pro načtení proměnné v níž je uložen text zadaný uživatelem 
  • Zadání: Na základě algoritmu HelloWorldNacteni vymyslete, jak byste v hlavní metodě Main naprogramovali načtení hodnoty zadané uživatelem uložené do proměnné s názvem osloveni pomocí konzolové aplikace v C#, včetně komentářů, které popisují, co jednotlivé příkazy zajišťují 
  • Řešení: Bude postupně probráno v následujícím textu a finální verze řešení bude zobrazena v další kapitole


Následující značka definuje, jak bychom ve vývojovém diagramu zaznamenali načtení textu do proměnné osloveni – viz Obrázek 1.

Načtení proměnné - algoritmus HelloWorldNacteni

Obrázek 1: Příklad načtení textu do proměnné osloveni - algoritmus HelloWorldNacteni

V tomto případě se jedná o čtení textu (v C# datový typ string) v konzolové aplikaci pomocí příkazu načtení ReadLine, který je definován ve třídě Console, tzn., že pokud budeme chtít zavolat tento příkaz, musíme napsat Console.ReadLine. Pokud chceme načíst v konzoli text a využíváme jmenný prostor System, můžeme pak pouze napsat příkaz Console.ReadLine namísto zdlouhavého System.Console. ReadLine.

Za slovem ReadLine následuje prázdná závorka. Pro uložení textu do proměnné využijeme operátor přiřazení (tj. =), který umístíme před příkaz čtení. Vlevo od tohoto operátoru napíšeme název proměnné, do níž budeme chtít text  uložit, v našem případě osloveni - viz Kód 1. 

//Načtení hodnoty (textu) do proměnné
osloveni = Console.ReadLine();

Kód 1: Příklad načtení textu do proměnné osloveni - program HelloWorldNacteni

Uživatelem zadaný text, který je vstupem do programu, např. uživatel zadá text pomocí klávesnice, je po stisknutí klávesy Enter na klávesnici (tzv. omezovače) načten do proměnné a program v konzoli umístí kurzor na nový řádek.

Příkaz Read nebudeme v našich programech používat, protože tento příkaz načítá sekvenčně jednotlivé znaky, a to v našem případě není zapotřebí.

Ve zdrojovém kódu budeme také využívat příkaz Console.ReadKey(). Tento příkaz budeme umísťovat před koncovou složenou závorku }, která značí konec provádění kódu. Příkaz zajistí, že program bude čekat, až uživatel stiskne nějakou klávesu. Náš kompilovaný program by bez tohoto příkazu totiž skončil a my bychom si ani nestihli přečíst výsledek, pokud by byl v programu vypisován.


Načtení čísla

V mnoha případech našich programů budeme potřebovat provádět aritmetické výpočty a k tomu potřebujeme znát hodnoty ve formě celých, nebo reálných čísel. Tak tomu bylo i v případě našeho algoritmu kalkulačky, kde jsme na začátku algoritmu načetli číselný kód prováděné aritmetické operace a následně dva operandy této operace.


Ilustrativní příklad Kalkulacka

Algoritmus Kalkulacka


Pokud jste si zapnuli v aplikaci Flowgorithm zobrazení kódu algoritmu Kalkulacka, asi jste zjistili, že aplikace přidává vlastní metodu readValue (podprogram - funkci) pro načtení čísla z klávesnice. Základní kamenem této funkce je konverze (transformace) načteného textu (v C# datového typu string, který představuje řetězec znaků) z klávesnice a jeho následné převedení na číslo. Existují různé typy konverze. Třídy jednotlivých datových typů obsahují metody, které jsou schopny převést text na celé nebo reálné číslo (záleží na tom, který datový typ jsme zvolili např. u proměnné). Konverzi budeme provádět pomocí příkazu Parse uvedeného za tečkou uvedenou přímo za datovým typem, do něhož chceme načtený text konvertovat. Tento příkaz konvertuje načtené znaky textu a poskládá je do výsledného čísla - viz Kód 2.

//Deklarace celočíselné proměnné - datový typ int
int kod;
/*Načtení textu z klávesnice do proměnné -> provedení konverze ->
  uložení konvertované hodnoty do proměnné*/
kod = int.Parse(Console.ReadLine());

Kód 2: Příklad načtení textu, jeho konverze na celé číslo a uložení do celočíselné proměnné

U tohoto příkazu musíme dávat pozor, abychom dobře napsali danou hodnotu čísla uváděnou pomocí načteného textu, protože pokud bychom např. napsali text "bflmpsvz", asi z něj těžko obdržíme po konverzi celé nebo reálné číslo. Ošetřováním chyb na vstupu a na výstupu se nyní věnovat nebudeme.

Všimněte si, že metodě Parse můžeme předat výsledek jako argument (vstupní parametr) výsledek jiné metody, v tomto případě ReadLine, než abychom vytvářeli další textovou proměnnou a do ní ukládali načtený text. Ušetřili jsme tím nejen kód, místo v paměti, ale zároveň i výpočetní výkon počítače. Takový postup je v programování běžný.

Značka načtení celého čísla ve vývojovém diagramu se nijak neliší od značky pro načtení textu (kosodélník s textem Input a za ním následuje název proměnné), který byl zobrazen na začátku této kapitoly.

Uváděný datový typ int je zkratkou pro třídu Int32. Je zbytečné vypisovat celou adresu této třídy ve jmenném prostoru, protože bychom např. pro metodu Parse museli uvádět System.Int32.Parse, což by značně prodlužovalo psaní kódu - viz Kód 3. Kompilátor by sám nabídl možnost zkrácení tohoto zápisu.

//Specifikace jmenného prostoru pro datový typ
kod = System.Int32.Parse(Console.ReadLine());

Kód 3: Specifikace jmenného prostoru pro datový typ

Stejným způsobem, jakým jsme načítali hodnotu do celočíselné proměnné, bychom postupovali i při načítání reálného čísla (datový typ double) – viz Kód 4.

//Deklarace reálné proměnné - datový typ double
double y;
//Konverze načteného textu na reálné číslo -> uložení do proměnné
y = double.Parse(Console.ReadLine());

Kód 4: Příklad načtení textu, jeho konverze na reálné číslo a uložení do reálné proměnné

Číslo se formátuje podle místních zvyklostí, tzn., že pokud je na operačním systému nastavena česká lokalizace, tak musí být zadáno desetinné číslo s českou desetinnou čárkou! Pokud ale např. přiřazujte hodnotu proměnné v kódu, musí být použita americká desetinná tečka.