Иди на текст

Читање и испис података

У програмском језику C податке си читао са стандардног улаза и исписивао их на стандардни излаз, углавном помоћу функција printf() и scanf(), дефинисаних у заглављу <stdio.h>.

У Console App (.NET Framework) пројектима, учитавање података из конзоле и испис података у конзолу веома је једноставно. Постиже се коришћењем класе Console која пружа низ метода, својстава и догађаја за интеракцију са конзолом. Класа Console дефинисана је у именском простору System, односно склопу System.Console.dll. Све методе, својства и догађаји детаљно су описани у званичној документацији за класу Console.

Испис података

За испис података у конзолу углавном ћеш користити методе Console.WriteLine() и Console.Write(). Метода Console.WriteLine() исписује задати текст, након чега курсор прелази у нови ред. Метода Console.Write() исписује текст без преласка курсора у нови ред. На пример:

Console.WriteLine("Ово је пример исписа са Console.WriteLine().");
// ...
Console.Write("Ово је пример ");
Console.Write("исписа са ");
Console.Write("Console.Write().");

У овом примеру, прва наредба Console.WriteLine исписује цео текст и прелази у нови ред, док наредне три Console.Write наредбе исписују текст у истом реду и курсор остаје у том реду. Ове методе подржавају разне начине за форматирање исписа, са чиме ћеш се упознати у наредним лекцијама.

Учитавање података

За учитавање података из конзоле углавном ћеш користити методу Console.ReadLine(). Ова метода чита цео ред унетог текста и враћа га као податак типа string. Најчешће се користи за читање података које уноси корисник. На пример:

string ime = Console.ReadLine();
Console.WriteLine(ime);

У овом примеру, метода Console.ReadLine() чита текстуални унос корисника и исти враћа као податак типа string, па се тај податак додељује променљивој ime, која је декларисана као променљива типа string. У другом реду исписује се вредност променљиве ime у једној линији конзоле, тј. исписује се текстуални унос корисника.

Вероватно се питаш како можеш учитати нумеричке податке помоћу методе која увек враћа податак типа string. Један од начина је позивањем методе Parse() класе нумеричког типа. На пример:

int godine = int.Parse(Console.ReadLine());
Console.WriteLine(godine);

double prosek = double.Parse(Console.ReadLine());
Console.WriteLine(prosek);

Реч Parse нема адекватан превод на српском језику, па је усвојен термин парсирање или парсовање. Парсирањем се једноставно проверава да ли низ задатих симбола одговара одговарајућим правилима. У примеру изнад, прво се проверава да ли низ карактера, којег је унео корисник, одговара правилима типа int. Ако одговара, метода int.Parse() вратиће унети цео број. Тај број биће додељен променљивој godine и следећом наредбом исписан у линији конзоле. Исти је поступак за учитавање реалног броја типа double.

С друге стране, ако се од корисника очекује да унесе цео број, а он унесе нешто друго, на пример унесе свој број година речима: sedamnaest, уместо да унесе број 17, јавиће се специфична грешка, која се у програмском језику C# назива изузетак. О изузецима ћеш учити детаљно у поглављу о руковању изузецима.

Сигурнији начин за парсирање нумеричких података је парсирање методом TryParse() јер она не баца изузетак ако парсирање није успешно. Уместо тога, враћа буловску вредност True или False, која показује да ли је парсирање успело, а парсирана вредност се враћа преко излазног параметра. На пример:

int.TryParse(Console.ReadLine(), out int godine1);
Console.WriteLine(godine1);
// или
if (int.TryParse(Console.ReadLine(), out int godine2))
{
    Console.WriteLine(godine2);
}
else
{
    Console.WriteLine("Unos nije validan. Unesi ceo broj!");
}

Уместо парсирања описаног у претходна два примера, може се користити и поступак конверзије, који је дефинисан у класи Convert. Ова класа има дефинисане методе за конвертовање између различитих типова, које покушавају да конвертују вредност и бацају изузетак ако конверзија није могућа. На пример:

int godine = Convert.ToInt32(Console.ReadLine());
Console.WriteLine(godine);

Значи, за парсирање нумеричких података унетих од стране корисника у конзоли, најбољи избор био би коришћење методе TryParse() због њене сигурности. Метода Parse() и методе класе Convert су такође корисне, али је потребно водити рачуна о могућим изузецима.