Читање и испис података
У програмском језику 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
. Најчешће се користи за читање података које уноси корисник. На пример:
У овом примеру, метода 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
. Ова класа има дефинисане методе за конвертовање између различитих типова, које покушавају да конвертују вредност и бацају изузетак ако конверзија није могућа. На пример:
Значи, за парсирање нумеричких података унетих од стране корисника у конзоли, најбољи избор био би коришћење методе TryParse()
због њене сигурности. Метода Parse()
и методе класе Convert
су такође корисне, али је потребно водити рачуна о могућим изузецима.