Statistika testů
K této kapitole
Zodpovězených: 0
Správně: 0
Špatně: 0
Úspěšnost: 0%
Nezodpovězených: 0

Pro testování a jeho statistické vyhodnocení je nutné se přihlásit.


Celkem
Zodpovězených: 0
Správně: 0
Špatně: 0
Úspěšnost: 0%
Nezodpovězených: 0

Vstup a výstup v konzolové aplikaci
Zde doplníme znalosti o konzolovém vstupně/výstupním rozhraní (I/O rozhraní).
RNDr. Dušan Kovář, Ph.D.
26. prosince 2005
Počet návštěv: 28436

Již víme, že stěžejní třída pro vstup a výstup v konzolové aplikaci v jazyce C# je třída System.Console. Pro čtení vstupu z příkazového řádku slouží metody:

  • Console.Read()
  • Console.ReadLine()

Metodu Console.Read() můžeme demonstrovat na následujícím programu:

using System;

namespace VstupAVystup.Priklad1
{
   class VstupniBodProgramu
   {
      static void Main()
      {
         Console.Write("Zadejte znak: ");

         // Vrátí kód jednoho znaku:
         int vstup = Console.Read();

         Console.WriteLine("vstup = {0}", vstup);
         Console.WriteLine("(char) vstup = {0}", (char) vstup);

         Console.ReadLine();
      }
   }
}

Metoda Console.Read() přečte další znak ze vstupního proudu a vrátí jeho kód (typu int). Pokud již žádný znak není, vrátí tato metoda hodnotu -1, což můžeme opět demonstrovat:

using System;

namespace VstupAVystup.Priklad2
{
   class VstupniBodProgramu
   {
      static void Main()
      {
         Console.Write("Zadejte větu: ");

         int vstup;
         char znak;
         
         // Čteme v cyklu znaky na vstupu:
         while (true)
         {
            vstup = Console.Read();
            if (vstup == -1)
               break;
            znak = (char) vstup;
            Console.WriteLine ("Zadáno: {0}", znak);
         }
         Console.WriteLine ("Hotovo");
      }
   }
}

Metoda Console.ReadLine() vrátí řetězec ze vstupu až po zadaný Enter. Užití opět naznačuje krátký program:

using System;

namespace VstupAVystup.Priklad3
{
   class VstupniBodProgramu
   {
      static void Main()
      {
         Console.Write("Zadejte větu: ");

         string veta = Console.ReadLine();
         
         Console.WriteLine ("Zadaná věta: {0}", veta);

         Console.ReadLine();
      }
   }
}

Pro výstup na příkazový řádek slouží následující dvě metody:

  • Console.Write()
  • Console.WriteLine()

Obě metody jsou mnohonásobně přetížené a vypíšou jakýkoliv datový typ, navíc mohou použít konverzi daného typu na řetězec pomocí metody ToString() definované pro daný datový typ. Liší se v tom, že metoda Console.WriteLine() navíc přidá nakonec znak nového řádku (new line) a znak pro návrat vozíku (carriage return).

Vyzkoušejte následující program:

using System;

namespace VstupAVystup.Priklad4
{
   class VstupniBodProgramu
   {
      static void Main()
      {
         Console.Write("Testovací text");

         Console.WriteLine("Testovací text");

         Console.Write("Testovací text");

         Console.ReadLine();
      }
   }
}

Metody Console.Write() i Console.WriteLine() nabízejí také formátovaný výstup, přičemž prvním parametrem je řetězec obsahující indexy ve složených závorkách, další parametry tvoří hodnoty, které nahradí indexy ve formátovacím řetězci. První index je 0 - odpovídá prvnímu argumentu za formátovacím řetězcem. Opět následuje krátká ukázka:

using System;

namespace VstupAVystup.Priklad5
{
   class VstupniBodProgramu
   {
      static void Main()
      {
         Console.Write("Zadejte vaši výšku v cm: ");
         int vyska = int.Parse(Console.ReadLine());

         Console.Write("Zadejte vaši hmotnost v kg: ");
         double hmotnost = double.Parse(Console.ReadLine());

         Console.WriteLine("Výška: {0}, hmotnost: {1}",
            vyska, hmotnost);

         Console.ReadLine();
      }
   }
}

Ve složené závorce lze čárkou oddělit dvě celočíselné hodnoty. První je zmíněný index, druhou je šířka. Vyzkoušejte zarovnání výstupu v následujícím programu:

using System;

namespace VstupAVystup.Priklad6
{
   class VstupniBodProgramu
   {
      static void Main()
      {
         Console.Write("Zadejte vaši výšku v cm: ");
         int vyska = int.Parse(Console.ReadLine());

         Console.Write("Zadejte vaši hmotnost v kg: ");
         double hmotnost = double.Parse(Console.ReadLine());

         Console.WriteLine("{0,3}\n{1,3}",
            vyska, hmotnost);

         Console.ReadLine();
      }
   }
}

Navíc je možné použít speciální formátovací řetězce pro znak měny (C), desetinný formát (D), vědecký formát (E), formát s pevnou desetinnou čárkou (F), číselný formát (N), procentuální formát (P), hexadecimální formát (H) a další, což opět ukážeme na krátkém programu:

using System;

namespace VstupAVystup.Priklad6
{
   class VstupniBodProgramu
   {
      static void Main()
      {
         // Vypíše jako měnu v místním nastavení,
         // budou 2 desetinná místa a celkem
         // 15 znaků (včetně mezer):
         Console.WriteLine("{0,15:C2}", 5456,4);
         // Vypíše ve vědeckém formátu pomocí E,
         // bude 7 míst za řádovou čárkou celkem
         // 15 znaků (včetně mezer):
         Console.WriteLine("{0,15:E7}", 5456,4);
         // Vypíše s pevným početem 7 desetinných míst,
         // celkem bude 15 znaků (včetně mezer):
         Console.WriteLine("{0,15:F7}", 5456,4);

         Console.ReadLine();
      }
   }
}

V tomto případě bude výstup následující:

    5 456,00 Kč
 5,4560000E+003
   5456,0000000


Hodnocení kapitoly "Vstup a výstup v konzolové aplikaci"
Oslovila vás tato kapitola?
Ohodnoťte její obsah počtem bodů od 1 (nejhorší) do 10 (nejlepší):
Průměrné hodnocení: 7,166667
Celkem hodnotilo 6 osob.
Jednotlivá hodnocení: 
Diskuze ke kapitole "Vstup a výstup v konzolové aplikaci"

Napadá vás zajímavá otázka související s touto kapitolou?

Přidejte do diskuze
Zatím diskutovaná témata:

Jsem debil? [, 21.11.2017 13:20:26 ]  
jo
Poslední příklad [J.J., 15.9.2014 17:29:26 ]  
Dobrý den,
myslím, že v posledním příkladu je chyba v Console.WriteLine("{0,15:C}", 5456,4); kde psaná hodnota je oddělena čárkou místo tečkou, poté to zobrazuje jen číslo 5456, a ne 5456,4.
Priklad1 [Tony, 7.11.2006 14:22:23 ]  
Priklad1 ma nejake zazivaci potize. Provede co ma, ale radek 17 "Console.ReadLine();" preskoci jako by tam nebyl a zavre okno aplikace. Kdyz napisu "Console.Rea.." dvakrat, tak uz posloucha. Jak je to prosim mozne?
Hotovo [sKopheK, 20.5.2006 21:16:28 ]  
program Hotovo nikdy nenapise, cim to ;)? btw hodilo by se formatovani textu, alespon radkovani :*/
"hotovo" [bochy, 8.3.2006 13:56:23 ]  
nema byt priklad2 takto : { vstup = Console.Read(); if (vstup == -1) break; znak = (char)vstup; Console.WriteLine("Zadáno: {0}", znak); Console.WriteLine("Hotovo"); } namisto : { vstup = Console.Read(); if (vstup == -1) break; znak = (char)vstup; Console.WriteLine("Zadáno: {0}", znak); } Console.WriteLine("Hotovo");

Vyhledávání
Přečtěte si knihu
C# Programujeme profesionálně
Robinson S., Allen K. S., Cornes O., Glynn J., Greenvoss Z., Harvey B., Nagel Ch. a další
Computer Press 2003

Programování v Microsoft .NET - Webové aplikace
Prosise, Jeff
Computer Press 2002

Programování Microsoft Windows v jazyce C#
Charles Petzold
Computer Press 2003
Programovací jazyk C# | Programování Windows Forms | Architektura .NET | ASP.NET | Dodatky | Diskuze
RNDr. Dušan Kovář, Ph.D.
Gymnázium Olomouc-Hejčín