Управление на конзолата с iostream класовете в C ++

Managing Console With Iostream Classes C



В компютрите конзолата е клавиатурата на компютъра и компютърният монитор. В миналото изходът се изпращаше директно към екрана на монитора, а не към прозорец, показан на монитора. За обикновения потребител на компютри днешните приложения не използват изрично монитора. Тези приложения използват прозорци, показани на монитора. Въпреки това, компютърният програмист все още трябва да използва екрана на монитора. Въпреки че програмистът все още трябва да използва екрана на монитора, операционната система не му позволява да направи това. Операционната система предоставя прозорец, който симулира екрана на монитора. В операционната система Windows този прозорец се нарича командния ред. В операционната система Linux и нейните варианти този прозорец се нарича терминал.

Очаква се читателят вече да знае как да използва командния ред или терминала. Тази статия обяснява как да четете символи и низове от клавиатурата и да изпращате символи и низове до терминала (или командния ред). Всеки C ++ програмист трябва да знае в тази статия.







За да има вход от клавиатурата и изход към терминала, програмата трябва да започне с:



#включва
използвайки пространство на именатачаса;

Съдържание на статията

Тесни обекти на потока от стандартния iostream

Класът iostream, стандартните обекти, cout, cin, cerr и clog, са създадени и вече са в стандартната библиотека. Програмистът просто ги използва, без да ги създава отново.



цена

Следното изявление във функцията main () изпраща текста: Това е изход. до терминала:





цена << 'Това е изход.';

cout е изходен iostream обект в стандартната библиотека, вече създаден.<< 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.

С горното изявление, повторно показаният команден ред се появява вдясно от изходната фраза. Не преминава към следващия ред. endl в края на следното изявление ще принуди всичко, което е отпечатано от екрана, на следващия ред:



цена << 'Това е изход.' <<endl;

endl е предварително дефинирана променлива. Екранното съдържание също може да бъде принудено към следващия ред с:

цена << 'Това е изход.' << 'н';

С използването на „ n“ всички редове текст все още може да не се появят веднага на екрана. endl изхвърля пълния ред текст на екрана.

Забележка: низ, изпратен до cout, е в двойни кавички, докато изпратеният знак е в единични кавички. Поредица от низове и символи могат да бъдат изпратени в едно изявление, всяко предхождано от<< . All that will appear in one line at the output if ‘ ’ is not in the series.

джин

cin е стандартният iostream входен обект, вече създаден и наличен в стандартната библиотека. Помислете за следния кодов сегмент във функцията main ():

charтекст[петдесет];
цена << „Въведете дума и натиснете Enter:“ текст;
цена <<текст<<endl;

Първото изявление декларира празен масив от 50 знака. Второто изречение инструктира потребителя да въведе дума на следващия ред на екрана и да натисне клавиша Enter. Обърнете внимание на използването на „endl“, което принуждава потребителя да въведе текст в следващия ред на екрана. Докато потребителят въвежда текст, въведеният текст се отразява на екрана, докато влиза в обекта cin. След натискане на Enter се изпълнява третото изявление в кодовия сегмент. Този трети израз изпраща въведения текст към променливата, txt. В този случай въведеният текст не трябва да е по -дълъг от 50 знака. Обърнете внимание на използването на оператора за извличане, >>. Последното изявление показва въведения текст на екрана.

cin може да отнеме повече от една дума от клавиатурата, разделени с интервали. Тези думи ще трябва да бъдат извлечени в различни променливи. Следният кодов сегмент илюстрира това:

charтекст[двайсет];
intто;
плувамft;
цена << „Въведете 3 стойности и натиснете Enter:“ текст>>то>>ft;
цена <<текст<< '' <<то<< '' <<ft<<endl;

Обърнете внимание на изявлението:

джин >>текст>>то>>ft;

Първата дума се извлича в txt, следващата до нея и последната в ft. Ако въведеното е,

един25 3.6

тогава изходът от сегмента на кода ще бъде,

един25 3.6

cerr

Следната програма има грешка:

#включва
използвайки пространство на именатачаса;

intглавен()
{
в myInt;

връщане 0;
}

Първото твърдение в main () не е правилно. Ако името на файла с кода е temp.cc и полученият изпълним файл трябва да се нарече temp, тогава следната команда g ++ ще изпрати съобщението за грешка на компилатора до файла, error.txt:

g++ -o temp temp.DC 2>грешка.текст

Ако файлът error.txt не съществува, той ще бъде създаден. Обърнете внимание на част 2> error.txt на командата g ++.

Екранът е стандартната дестинация за изход, а също и стандартната дестинация за грешка. Ако 2> error.txt е пропуснато от командата g ++, тогава съобщението за грешка на компилатора ще бъде изпратено до стандартната дестинация за грешка, която все още е екранът (мониторът).

Обектът на потока, който представлява стандартната изходна дестинация, е cout. Обектът на потока, който представлява стандартната дестинация за грешка, е cerr. Грешка по време на изпълнение на програма може да бъде изпратена на екрана, както следва:

cerr << „Съобщението за грешка!“ << 'н';

запушване

Приложението приема различни данни по различно време. Всички входове могат да бъдат показани отново на екрана. Всички входове могат да бъдат записани във файл. Това е регистриране. Стандартната дестинация за регистриране е екранът. Стандартният обект на потока на регистриране е запушен. Следният код ще покаже отново въведения текст на екрана:

charтекст[петдесет];
цена<<„Въведете текст и натиснете Enter:“текст;
запушване<<текст<<endl;

Ако въведеният текст е „input_text“, тогава запушването ще покаже отново „input_text“ на екрана.

На практика регистрацията обикновено се пренасочва към файл. Следната програма илюстрира това:

#включва
използвайки пространство на именатачаса;

intглавен()
{
freopen( 'log.txt','в',stdout);

цена << 'input_text' <<endl;
}

Обърнете внимание на използването на функцията, freopen () и нейните аргументи. Първият му аргумент е името на лог файла. Ако файлът не съществува, той ще бъде създаден. Вторият му аргумент е „w“ за „write“. Третият му аргумент е stdout за стандартен изход. Второто изявление във функцията main () използва cout за изпращане на текста за регистриране във файла. Забележка: Действителният входен код не е показан в тази програма.

Получаване на символи и низове от клавиатурата

Докато потребителят въвежда въвеждане, знаците се изпращат към буфера на входния поток и се показват на екрана. Когато потребителят натисне клавиша Enter, всички знаци са в буфера; също така, курсорът преминава в началото на следващия ред по -долу, на екрана. След това програмата продължава към следващия програмен израз, след израза за четене на вход.

Обектът cin има методи, за които се отнася този раздел.

Четене на първия знак

get (char_type & c):
Следният кодов сегмент показва как се чете първият знак от буфера на входния поток:

charгл;
цена << 'Въвеждане на текст:' <<endl;
джин.вземете(гл);
цена <<гл<<endl;

Първият израз декларира знак без присвояване. Второто изявление казва на потребителя да въведе знак. Когато потребителят въведе символ и натисне клавиша Enter, третият израз копира знака от буфера на входния поток в променливата, гл.

Дори ако потребителят въведе повече от един знак, първият знак ще бъде взет от кодовия сегмент.

get ():
get () без аргумент, връща десетичния ASCII код. Помислете за следния кодов сегмент:

цена << 'Въвеждане на текст:' <<endl;
цена << джин.вземете() <<endl;

Ако входът е „asdfg“, тогава 97 ще бъде върнат, което е десетичният ASCII код за „a“.

get (char_type* s, streamsize n)

След като потребителят въведе фраза и натисне клавиша Enter, няколко букви, започващи от първия, могат да бъдат извлечени от буфера на потока cin. Може да се използва следният код:

charстр[10];
цена << 'Въвеждане на текст:' <<endl;
джин.вземете(str,10);
цена <<стр<<endl;

Ако въвеждането е „велики хора“, тогава изходът ще бъде „страхотен peo“, с 9 знака, а не 10. Низовият символ NUL ( 0) заема десетата позиция в аргумента get. Така че, за да има 9 символа в str, неговият размер на хранилището трябва да бъде най -малко 10, а аргументът get () трябва да бъде 11. Ако целият входен ред е желателен, тогава номерът на низовото съхранение трябва да бъде поне числото на въведени знаци, плюс 1. Така че, ако 12 знака са въведени за целия ред, тогава числото трябва да бъде 13 за размера на низа (str) за съхранение и 13 за аргумента get (). Обърнете внимание, че едно интервал се брои като един знак.

get (char_type* s, streamsize n, char_type delim)
Възможно е да се извлече подниза, разделена вдясно, при първото появяване на определен символ или чрез потока на подниза, който някога е първи. Ако въведеният текст в следния код е страхотни хора, тогава би било извлечено страхотно:

charстр[30];
цена << 'Въвеждане на текст:' <<endl;
джин.вземете(str,6,'или');
цена <<стр<<endl;

Шестата позиция от началото е интервалът и той ограничава изключително извлечения подниза. Шестата позиция е първа пред единствения знак „o“. Обърнете внимание, че размерът на хранилището за str може да бъде възможно най -висок.

Ако входният текст на следния код е страхотен човек, тогава gr ще бъде извлечен:

charстр[30];
цена << 'Въвеждане на текст:' <<endl;
джин.вземете(str,10,'И');
цена <<стр<<endl;

Първото появяване на „е“ идва първо преди десетата позиция.

Получаване на всички символи на линия

След натискане на клавиша Enter всички знаци, въведени в реда, могат да бъдат получени, както е показано в следния код:

цена << 'Въвеждане на текст:' <<endl;
докато (1) {
charгл= (char)джин.вземете();
цена <<гл;
ако (гл== 'н')
прекъсване;
}

Замятането с (char) преобразува всяко десетично число в съответния ASCII символ.

надниквам ()

Функциите -членове get () не само четат следващия символ; те го премахват от буфера за потоци. Членската функция peek () simple обаче чете следващия знак (започващ от първия), без да го премахва от буфера. В следния код всеки знак първо се чете с функцията peek (), преди да бъде премахнат, от функцията get (). Всичко това се случва, след като потребителят натисне клавиша Enter:

цена << 'Въвеждане на текст:' <<endl;
докато (1) {
charгл= (char)джин.надниквам();
цена <<гл;
джин.вземете();
ако (гл== 'н')
прекъсване;
}

Ако следващите знаци не бяха премахнати от get (), peek () щеше да чете само първия знак, а цикълът ще се повтаря за неопределено време.

Показване и изтриване на знаци преди натискане на Enter

Забележете, че с обекта cin, клавишът Enter трябва да бъде натиснат, преди да има действие. Е, възможно е символите да се показват, докато се въвеждат и изтриват, преди да натиснете клавиша Enter. Това обаче означава взаимодействие с операционната система. Операционните системи се различават. Това означава различно кодиране за различни операционни системи. Така че тази тема заслужава съвсем различен урок - вижте по -късно.

Изпращане на символи и низове на монитора

Обектът cout е обект на изходен поток, вече създаден и присъстващ в стандартната библиотека на C ++. cout е основният обект, използван при изпращане на символи и низове към монитора. Това става с оператора за вмъкване,<< . 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.

Изрази, които водят до скалари, могат да бъдат аргументи за оператора на вмъкване. Операторът преобразува скалара в текст и поставя текста в потока на обекта cout. Когато текстът се изпраща към обекта cout, той обикновено се появява на екрана (монитора). Понякога обаче може да не се появи веднага. За да принудите текст на екрана, вмъкнете специалната стойност, endl, точно след вмъкването на текста. Това ще доведе до изхвърляне на текста на екрана и ще бъде добавен нов ред. Забележка: „ n“ просто добавя нов ред, но не изчиства текст на екрана.

Следващата програма показва как да отпечатате стойностите на int, float и обикновен текст върху екрана:

#включва
използвайки пространство на именатачаса;

intглавен()
{
intто= 5;
плувамft= 63.5;
цена << 'The' <<то<< „артикулите струват $“ <<ft<< ' НАС.' <<endl;

връщане 0;
}

Изходът е:

The5артикулите струват $63.5НАС.

Следващата програма показва как се отпечатва низът на обект, създаден от клас:

#включва
използвайки пространство на именатачаса;

структураСв{
charстр[единадесет] = 'някои думи';
}obj;

intглавен()
{
цена <<obj.стр << 'н';

връщане 0;
}

Резултатът е „някои думи“.

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

Изпълнението на програмата започва от функцията main (). Функцията main () всъщност има два незадължителни параметъра. Синтаксисът на функцията main () с незадължителните параметри е:

intглавен(intargc,char *argv[argc])
{

връщане 0;
}

Да приемем, че името на изпълнимия C ++ файл е temp. Да приемем, че аргументите, които програмата се нуждае от своята среда (операционна система), въведени от потребителя, са,

статии3химикалка за книги'голяма къща'

Тук има 5 аргумента: статии, 3, книга, химикалка и голяма къща

Всяка е текст. Номериран аргумент на програма е текст. С други думи, всеки аргумент е низ. голямата къща е в кавички, защото е фраза. Командата на терминала за стартиране на тази програма ще бъде:

./временни статии3химикалка за книги'голяма къща'

Ако приемем, че температурата на файла е в началната директория. Имайте предвид, че интервалите, а не запетаите разделят аргументите.

Сега, в синтаксиса на функцията main (), argc е броят на аргументите за програмата, плюс 1. В този случай има 5 аргумента за програмата. И така, argc е 6. В синтаксиса argv [argc] е масив от указатели към низове. Първата стойност за този масив в argv [0] е дадена от компилатора. Това е указател към името на програмния файл. Останалите стойности са указатели към програмните аргументи в реда на въвеждане на потребителя. Размерът на този масив е argc. В този случай размерът е 1 + 5 = 6.

Да приемем, че при компилация следната програма се нарича temp:

#включва
използвайки пространство на именатачаса;

intглавен(intargc,char**argv)
{

цена <<argv[0] << ',' <<argv[1] << ',' <<argv[2] << ',' <<argv[3] << ',' <<argv[4] << ',' <<argv[5] <<endl;

връщане 0;
}

Имайте предвид, че масивът 'char*argv [argc]' е деклариран като 'char ** argv'.

Ако тази програма се изпълнява с командата на терминала,

./временни статии3химикалка за книги'голяма къща'

тогава изходът ще бъде:

./temp, статии,3, книга, химикалка, голяма къща

Обърнете внимание, че пътят на директорията е включен с името на изпълнимия файл.

Също така имайте предвид, че при изпълнението на програмата (извикване на програмата) стойността за argc не е изпратена.

Заключение

Класът iostream има четири важни обекта, които са cout, cin, cerr и clog. cin е входен обект, докато останалите са изходни обекти. Докато програма се изпълнява, входът в програмата е различен от времето, когато програмата трябва да започне да работи. Когато програмата започне да се изпълнява, входът към програмата се свързва с командата за изпълнение на програмата, разделена с интервали.