Управљање конзолом са иостреам класама у Ц ++

Managing Console With Iostream Classes C



У рачунарству, конзола је тастатура рачунара и монитор рачунара. Раније се излаз слао директно на екран монитора, а не у прозор приказан на монитору. За обичног корисника рачунара данашње апликације не користе монитор изричито. Ове апликације користе прозоре приказане на монитору. Међутим, рачунарски програмер и даље треба да користи екран монитора. Иако програмер и даље треба да користи екран монитора, оперативни систем му то не дозвољава. Оперативни систем пружа прозор који симулира екран монитора. У оперативном систему Виндовс овај прозор се назива командна линија. У оперативном систему Линук и његовим варијантама овај прозор се назива терминал.

Очекује се да читалац већ зна како да користи командну линију или терминал. Овај чланак објашњава како се читају знакови и низови са тастатуре и шаљу знакови и низови на терминал (или командну линију). Сваки Ц ++ програмер треба да зна у овом чланку.







Да бисте имали улаз са тастатуре и излаз на терминал, програм мора почети са:



#инцлуде
Користећи именски просторсати;

Садржај чланка

Објекти уског тока стандардног иостреама

Иостреам класа, стандардни објекти, цоут, цин, церр и цлог, су настали и већ су у стандардној библиотеци. Програмер их само користи без поновног инстанцирања.



цена

Следећа наредба у главној () функцији шаље текст, Ово је излаз. до терминала:





цена << 'Ово је излаз.';

цоут је излазни иостреам објекат у стандардној библиотеци, већ инсталиран.<< is the insertion operator, which sent the bytes, This is output. to the output stream object, cout. When the statement is executed, the text appears on the screen.

Са горњом изјавом, поново приказана командна линија појављује се десно од излазне фразе. Не иде се на следећи ред. ендл на крају следеће наредбе ће приморати све што је одштампано на екрану у следећи ред:



цена << 'Ово је излаз.' <<ендл;

ендл је унапред дефинисана променљива. Садржај екрана такође може бити приморан на следећи ред са:

цена << 'Ово је излаз.' << ' н';

Помоћу „ н“ сви редови текста се можда неће одмах појавити на екрану. ендл пушта читаву линију текста на екран.

Напомена: низ послат у цоут налази се у двоструким наводницима, док се знак који се шаље налази у једноструким наводницима. Низ низова и знакова може се послати у једној наредби, свакој претходи<< . All that will appear in one line at the output if ‘ ’ is not in the series.

џин

цин је стандардни иостреам улазни објекат, већ инсталиран и доступан у стандардној библиотеци. Размотрите следећи сегмент кода у функцији маин ():

цхарткт[педесет];
цена << 'Унесите реч и притисните Ентер:' ткт;
цена <<ткт<<ендл;

Прва наредба декларише празан низ од 50 знакова. Друга наредба упућује корисника да откуца реч у следећој линији екрана и притисне тастер Ентер. Обратите пажњу на употребу 'ендл' која приморава корисника да унесе текст у следећи ред екрана. Док корисник куца текст, унети текст се одзвања на екран док улази у цин објекат. Након притиска на Ентер, извршава се трећа наредба у сегменту кода. Ова трећа наредба шаље унети текст променљивој, ткт. У овом случају унети текст не сме бити дужи од 50 знакова. Обратите пажњу на употребу оператора екстракције, >>. Последња изјава приказује унети текст на екрану.

цин може узети више од једне речи са тастатуре, одвојене размацима. Ове речи ће се морати издвојити у различите променљиве. Следећи сегмент кода то илуструје:

цхарткт[двадесет];
интто;
пловакфт;
цена << 'Унесите 3 вредности и притисните Ентер:' ткт>>то>>фт;
цена <<ткт<< '' <<то<< '' <<фт<<ендл;

Обратите пажњу на изјаву:

џин >>ткт>>то>>фт;

Прва реч се издваја у ткт, поред ње, а последња у фт. Ако је унос био,

један25 3.6

тада би излаз по сегменту кода био,

један25 3.6

церр

Следећи програм има грешку:

#инцлуде
Користећи именски просторсати;

интглавни()
{
ин миИнт;

повратак 0;
}

Прва изјава у маин () није тачна. Ако је назив датотеке са кодом темп.цц, а резултујућа извршна датотека ће се звати темп, следећа г ++ команда ће послати датотеку грешке компајлера, еррор.ткт:

г++ -о темп темп.ДЦ 2>грешка.ткт

Ако датотека еррор.ткт не постоји, биће креирана. Забележите део 2> еррор.ткт наредбе г ++.

Екран је стандардно одредиште излаза, а такође је и одредиште стандардне грешке. Ако је 2> еррор.ткт изостављено из наредбе г ++, тада ће се порука о грешци компајлера послати на стандардно одредиште грешке, које је и даље екран (монитор).

Објекат тока који представља стандардно излазно одредиште је цоут. Објекат тока који представља стандардно одредиште грешке је церр. Грешка током извођења програма може се послати на екран на следећи начин:

церр << 'Порука о грешци!' << ' н';

цлог

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

цхарткт[педесет];
цена<<'Унесите текст и притисните Ентер:'ткт;
цлог<<ткт<<ендл;

Ако је улазни текст 'инпут_тект', онда би цлог поново приказао 'инпут_тект' на екрану.

У пракси се евидентирање обично преусмерава у датотеку. Следећи програм то илуструје:

#инцлуде
Користећи именски просторсати;

интглавни()
{
фреопен( 'лог.ткт','ин',стдоут);

цена << 'унос текста' <<ендл;
}

Обратите пажњу на употребу функције, фреопен () и њене аргументе. Његов први аргумент је име датотеке дневника. Ако датотека не постоји, биће креирана. Његов други аргумент је 'в' за 'врите'. Његов трећи аргумент је стдоут за стандардни излаз. Друга наредба у функцији маин () користи цоут за слање текста записника у датотеку. Напомена: Стварни улазни код није приказан у овом програму.

Добијање знакова и низова са тастатуре

Док корисник уноси унос, знакови се шаљу у бафер улазног тока и приказују се на екрану. Када корисник притисне тастер Ентер, сви знакови се налазе у баферу; такође, курсор прелази на почетак следећег реда испод, на екрану. Програм се затим наставља на наредну наредбу програма, након наредбе за читање уноса.

Објекат цин има методе о којима се говори у овом одељку.

Читање првог лика

гет (цхар_типе & ц):
Следећи сегмент кода показује како се чита први знак из бафера улазног тока:

цхарцх;
цена << 'Унос текста:' <<ендл;
џин.добити(цх);
цена <<цх<<ендл;

Прва наредба декларише знак без додељивања. Друга наредба говори кориснику да унесе знак. Када корисник унесе карактер и притисне тастер Ентер, трећа наредба копира знак из бафера улазног тока у променљиву, гл.

Чак и ако је корисник уписао више од једног знака, први знак би узео сегмент кода.

добити():
гет () без аргумента, враћа децимални АСЦИИ код. Размотрите следећи сегмент кода:

цена << 'Унос текста:' <<ендл;
цена << џин.добити() <<ендл;

Ако је унос 'асдфг', вратиће се 97, што је децимални АСЦИИ код за 'а'.

гет (цхар_типе* с, стреамсизе н)

Након што корисник унесе фразу и притисне тастер Ентер, број знакова који почињу од првог, може се извући из бафера цин стреам -а. Може се користити следећи код:

цхарп[10];
цена << 'Унос текста:' <<ендл;
џин.добити(стр,10);
цена <<п<<ендл;

Ако је унос 'велики људи', излаз ће бити 'велики пео', од 9 знакова, а не 10. НУЛл низа НУЛ ( 0) заузима десету позицију у аргументу гет. Дакле, да би имао 9 знакова у стр -у, његова меморијска величина мора бити најмање 10, а аргумент гет () мора бити 11. Ако је цела линија за унос пожељна, онда број за складиштење низа мора бити најмање број унетих знакова, плус 1. Дакле, ако је за цео ред откуцано 12 знакова, онда би број требало да буде 13 за величину складишног низа (стр) и 13 за аргумент гет (). Имајте на уму да се један размак рачуна као један знак.

гет (цхар_типе* с, стреамсизе н, цхар_типе делим)
Могуће је издвојити подниз, разграничен с десне стране, првим појављивањем одређеног знака или величином тока подниза, која је икада прва. Ако су улазни текст у следећи код сјајни људи, онда би се извукли сјајни:

цхарп[30];
цена << 'Унос текста:' <<ендл;
џин.добити(стр,6,'или');
цена <<п<<ендл;

Шеста позиција од почетка је размакница и она искључиво ограничава издвојени подниз. Шеста позиција је прва испред јединог знака, 'о'. Имајте на уму да величина складишног простора за стр може бити што је могуће већа.

Ако су улазни текст у следећи код сјајни људи, онда би се гр издвојио:

цхарп[30];
цена << 'Унос текста:' <<ендл;
џин.добити(стр,10,'И');
цена <<п<<ендл;

Прва појава 'е' долази прва пре десете позиције.

Добијање свих карактера линије

Након притиска на тастер Ентер, сви знакови откуцани у ред могу се добити као што је приказано у следећем коду:

цена << 'Унос текста:' <<ендл;
док (1) {
цхарцх= (цхар)џин.добити();
цена <<цх;
ако (цх== ' н')
пауза;
}

Ливење са (цхар) претвара сваки децимални број у одговарајући АСЦИИ знак.

завирити ()

Функције члана гет () не читају само следећи знак; уклањају га из међуспремника тока. Међутим, функција члана пеек () симпле чита следећи знак (почевши од првог) без уклањања из бафера. У следећем коду, сваки знак се прво чита помоћу функције пеек () пре него што се уклони, помоћу функције гет (). Све се то дешава након што корисник притисне тастер Ентер:

цена << 'Унос текста:' <<ендл;
док (1) {
цхарцх= (цхар)џин.завирити();
цена <<цх;
џин.добити();
ако (цх== ' н')
пауза;
}

Да наредни знакови нису уклоњени помоћу гет (), пеек () би читао само први знак, а петља ће понављати унедоглед.

Приказ и брисање знакова пре него што притиснете Ентер

Имајте на уму да се са цин објектом мора притиснути тастер Ентер пре него што дође до акције. Па, могуће је да се знакови приказују док се куцају и бришу пре притиска на тастер Ентер. Међутим, то значи повезивање са оперативним системом. Оперативни системи се разликују. Дакле, ово значи различито кодирање за различите оперативне системе. Дакле, ова тема заслужује потпуно другачији водич - погледајте касније.

Слање знакова и низова на монитор

Објекат цоут је објекат излазног тока, већ инсталиран и присутан у стандардној библиотеци Ц ++. цоут је главни објект који се користи за слање знакова и низова на монитор. Ово се ради помоћу оператора уметања,<< . With the cin object, the text is obtained line-by-line. With the cout object, the text is added onto the same line until ‘ ’ or endl is encountered.

Изрази који резултирају скаларима могу бити аргументи за оператор уметања. Оператор претвара скалар у текст и смешта текст у ток цоут објеката. Када се текст пошаље на објекат цоут, он се обично појављује на екрану (монитору). Међутим, повремено се можда неће појавити одмах. Да бисте текст наметнули на екран, уметните посебну вредност, ендл, одмах након уметања текста. Ово ће проузроковати да се текст пребаци на екран и биће додат нови ред. Напомена: „ н“ једноставно додаје нови ред, али не испире текст на екрану.

Следећи програм показује како да одштампате вредности инт, флоат и обичног текста на екрану:

#инцлуде
Користећи именски просторсати;

интглавни()
{
интто= 5;
пловакфт= 63.5;
цена << 'Тхе' <<то<< 'ставке коштају $' <<фт<< 'САД'. <<ендл;

повратак 0;
}

Излаз је:

Тхе5ставке коштају $63.5УС.

Следећи програм приказује како се штампа низ објекта који је изведен из класе:

#инцлуде
Користећи именски просторсати;

струцтСт{
цхарп[Једанаест] = 'неке ријечи';
}обј;

интглавни()
{
цена <<обј.п << ' н';

повратак 0;
}

Излаз је 'неке речи'.

Аргументи за Ц ++ програм

Извршавање програма почиње од функције маин (). Функција маин () заправо има два опциона параметра. Синтакса функције маин () са опционим параметрима је:

интглавни(интаргц,цхар *аргв[аргц])
{

повратак 0;
}

Претпоставимо да је име извршне Ц ++ датотеке темп. Претпоставимо да су аргументи потребни програму из његовог окружења (оперативног система), које је откуцао корисник,

чланци3оловка за књиге'Велика кућа'

Овде постоји 5 аргумената: чланци, 3, књига, оловка и велика кућа

Сваки је текст. Нумерисани аргумент програма је текст. Другим речима, сваки аргумент је низ. велика кућа је под наводницима јер је то фраза. Наредба терминала за покретање овог програма била би:

./привремени чланци3оловка за књиге'Велика кућа'

Под претпоставком да је темп датотеке у матичном директоријуму. Имајте на уму да размаци, а не зарези раздвајају аргументе.

Сада, у синтакси функције маин (), аргц је број аргумената за програм, плус 1. У овом случају постоји 5 аргумената за програм. Дакле, аргц је 6. У синтакси, аргв [аргц] је низ показивача на низове. Прву вредност за овај низ на аргв [0] даје компајлер. То је показивач на назив програмске датотеке. Остале вредности су показивачи на програмске аргументе према унетом корисничком редоследу. Величина овог низа је аргц. У овом случају величина је 1 + 5 = 6.

Претпоставимо да се при компилацији следећи програм назива темп:

#инцлуде
Користећи именски просторсати;

интглавни(интаргц,цхар**аргв)
{

цена <<аргв[0] << ',' <<аргв[1] << ',' <<аргв[2] << ',' <<аргв[3] << ',' <<аргв[4] << ',' <<аргв[5] <<ендл;

повратак 0;
}

Овде имајте на уму да је низ 'цхар*аргв [аргц]' декларисан као 'цхар ** аргв'.

Ако се овај програм покреће помоћу наредбе терминала,

./привремени чланци3оловка за књиге'Велика кућа'

онда би излаз био:

./темп, чланци,3, књига, оловка, велика кућа

Имајте на уму да је путања директоријума укључена у назив извршне датотеке.

Такође имајте на уму да током извођења програма (позивање програма) вредност за аргц није послата.

Закључак

Иостреам класа има четири важна објекта који су цоут, цин, церр и цлог. цин је улазни објекат, док су остали излазни објекти. Док је програм покренут, улаз у програм се разликује од оног када програм треба да се покрене. Када се програм покрене, улаз у програм се придружује наредбом за покретање програма, одвојену размацима.