C++ istream функции

C Istream Funkcii



Терминът 'поток' в C++ описва потока от знаци между нишката на програмата и вход/изход. Класовете на C++ поток са необходими за въвеждане и извеждане на действия на IO устройства и файлове. Тези класове са предназначени да управляват входа и изхода на програмата и имат специфична функционалност.

Йерархия на класа на потока

C++ класът се състои от методи, необходими за управление и управление на данните, които съдържа.

float, doubles и classes са типове данни, подобни на int. Уникална променлива с клас като тип данни се нарича C++ обект. Предварително зададените специални обекти „cin“ и „cout“ имат различни класове като техни типове данни.







Данните, записани в „cout“ или прочетени от „cin“, са примери за потоци от данни към или извън програми в C++. В момента обмисляме следните четири класа за този:



Предавайте го поточно
Всяка цел може да бъде обслужвана от този входен поток. Илюстрация на istream е cin.



Ostream
Това е изходен поток с няколко приложения. Ostreams идват под формата на cout и cin.





Ако поток
Това е поток от входни файлове.

на поток
Това е поток от изходни файлове. Наследяването е понятие, което се използва широко в обектно-ориентираното програмиране, като например в C++, където някои класове приемат характеристиките на други класове, които вече са били създадени. След това предшествениците се превръщат в специализации чрез включването на нови функции.



Ако поток клас
Ifstream може да се третира по същия начин като istream, което е.

От поточен клас
По същия начин, по който функционира ifstreams, но с изход вместо вход, ofstream е изходен файлов поток. Ofstream се използва по същия начин като cout, след като бъде конструиран, отворен и проверен за липса на грешки.

Ios клас
От този клас произлизат всички класове на потока. Входните и изходните потоци са два различни типа.

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

За разлика от членовете, които се обсъждат в базата на ios, членовете, които зависят от параметрите на шаблона, са описани в тази част.

Поток (вход)
Поради сложността на библиотеката на iostream няма да можем да я покрием изцяло в тези уроци. Въпреки това ще подчертаем функциите, които се използват най-много. В този раздел ще разгледаме входния клас от различни ъгли (istream).

Научихме, че операторът за извличане (>>) ще бъде използван за получаване на данните от входен поток.

ПОТОК

В езика за програмиране C++ входният поток се обработва от класа istream. Входът се чете и разбира като поредица от знаци, използвайки тези обекти на входния поток. Входът се обработва от cin.

Класове за членове

istream::sentry
Клас, който изпълнява много задачи и всеки път се изпълнява процедура за въвеждане. Неговият деструктор не е длъжен да извършва никакви действия. Реализациите обаче могат да изпълняват допълнителни задачи за стартиране или почистване на потока, споделен от всички входни операции, като използват създаването и унищожаването на часови обекти.

Функции

istream::gcount
Дава броя знаци, който е получен от последното неформатирано действие на обекта за въвеждане. Неформатираните процедури за въвеждане — get, getline, ignore, peek, read, read some, putback и unget — променят стойността, върната от тази функция. Имайте предвид обаче, че извикването на peeks, putback или unget не извлича никакви знаци. В резултат на това броячът винаги ще връща 0.

istream::get
Единичният знак извежда един знак от потока. Символът или се задава като стойност на аргумента, или се връща (първи подпис) (втори подпис).

C низ: Ако разделящият знак присъства, той не се премахва от входната последователност, вместо това се запазва като следващ знак, който да бъде извлечен от потока, ако присъства.

istream::getline
Премахва символи от потока като неформатиран вход и ги записва като c-низ в променливата „s“, докато извлеченият знак стане разделящ знак или „n“ знака не бъдат записани в „s“. Освен това методът ще спре да извлича знаци, ако достигне края на файла.

Вътрешно функцията създава обект преди достъп до входната последователност. И накрая, той убива обекта, преди да се върне, извличайки символи от свързания с него обект на буфер за поток (ако приемем, че всичко е наред), сякаш изпълнява един от своите методи-членове, sbumpc или sgetc.

istream::ignore
Символите се вземат от входната последователност и се изхвърлят един по един, докато не бъдат извадени или 'n' знака, или един се сравнява с разделителя. Освен това, ако бъде достигнат краят на файла, функцията спира извличането на знаци. Функцията задава флага „eofbit“, ако достигне тази точка твърде рано (преди да извлече n знака или да открие разделител).

Преди да получи достъп до входната последователност, функцията конструира вътрешно часови обект (с noskipws ще бъде вярно). И накрая, той убива часовия обект, преди да се върне, извличайки символи от свързания с него обект на буферен поток (ако приемем, че всичко е наред), сякаш изпълнява един от своите методи-членове: sbumpc или sgetc.

istream::operator>>
Операторът за извличане (>>) прилага този оператор към входен поток. Има твърде много членове като функция.

Аритметичен тип

Символите се изваждат от потока и се анализират последователно, за да представят стойност от правилния тип, която след това се записва като стойността на „val“. Преди да получи достъп до входната последователност, функцията конструира вътрешно часови обект (noskipws ще бъде false). Ако всичко се проверява добре, тогава се изпълнява num get::get, за да завърши процесите на извличане и анализиране, докато модифицира вътрешните флагове за състояние на потока. Часовият обект е окончателно унищожен, преди да напусне.

Функцията вътрешно генерира часови обект, преди да прочете входната последователност, тя се разглежда като извършваща форматиран вход. И накрая, той убива часовия обект, преди да се върне, извличайки символи от свързания с него обект на буферен поток (ако приемем, че всичко е наред), сякаш изпълнява един от своите методи-членове, sbumpc или sgetc.

Манипулатори

Извиква се pf (*this), където pf може да бъде манипулатор. Манипулаторите са рутинни процедури, създадени специално за извикване при извикване на този оператор. Входната последователност не се влияе от тази процедура и не се извличат знаци.

istream::връщане
Възстановеният символ се опитва да премести курсора с един знак надолу в потока, така че последният символ, извлечен от потока, да може отново да бъде извлечен чрез операции за въвеждане.

Преди да получи достъп до входната последователност, функцията конструира вътрешно часови обект. След това извиква sputbackc(c) на своя асоцииран обект на буфер за поток (ако е добър). Часовият обект е окончателно унищожен, преди да напусне.

istream::read
Прочетете блок от данни:

Символите „n“ се вземат от потока и след това се съхраняват в масива, към който сочи „s“. Тази функция просто репликира блок от данни, без да проверява съдържанието на данните или да добавя нулев знак в края.

В рамките на функцията първо се създава часови обект, преди да се осъществи достъп до входната последователност. И накрая, той убива часовия обект, преди да се върне, извличайки символи от свързания с него обект на буферен поток (ако приемем, че всичко е наред), сякаш изпълнява един от своите методи-членове: sbumpc или sgetc.

Извикването на броя на членовете ще върне общия брой знаци, които тази функция правилно е прочела и съхранила.

istream::readsome
Тази функция зависи от вътрешната работа на конкретния буферен обект на потока, свързан с потока, чието поведение до голяма степен се определя от изпълнението за стандартни класове.

В рамките на функцията първо се създава часови обект, преди да се осъществи достъп до входната последователност. След това (ако е успешен), той извиква членската функция в avail на обекта на буфера на потока, за да определи колко символа са налични, преди да извика „sbumpc“, за да извлече до този брой знаци (или sgetc). Часовият обект е окончателно унищожен, преди да напусне.

istream::seekg
Позицията във входния ред определя къде ще бъде изтеглен следващият знак от входния поток. Преди да прочете входната последователност, функцията вътрешно конструира часови обект. След това (ако е ОК), той прави едно от двете извиквания към съответния обект на буфер за поток: pubseekpos (1) или pubseekoff (2), (ако има такъв). Накрая, той заличава часовия елемент и си тръгва.

istream::sync
Подравнете входния буфер:

Синхронизира контролираната входна последователност на буфера на свързания поток. Конкретната реализация на обекта на буфера на потока, свързан към потока, определя спецификата на операцията.

istream::tellg
Получете позицията на входната последователност:

Той дава позицията на текущия знак във входния поток. След това функцията връща -1. Ако членът не успее, той връща true.

Връща rdbuf()->pubseekoff, ако не (0,cur,in). Часовият обект е окончателно унищожен, преди да напусне.

istream::unget
Премахване на символ:

Опитва се да премести курсора с един знак надолу в потока, така че последният символ, извлечен от потока, да може отново да бъде извлечен чрез операции за въвеждане.

Нечлен

оператор>> (istream)
Операторът за извличане (>>) предоставя форматиран вход с това действие, когато се прилага към входен поток.

Един знак: Последователността от символи изважда следващия знак от него и го съхранява като стойността на „c“. Процесът на извличане на знаци от is и съхраняването им в s, като c-низ, спира (ако ширината не е нула), когато се срещне празен знак или (width ()-1) знаци са извлечени.

Извличане на rvalue: позволява извличане от rvalue istream обекти, което има същия резултат като извличане от lvalue: Извиква is>>Val.

Пример 1

В този случай ще проучим как можем да получим някаква стойност от потребителя и след това да я покажем като резултат на екрана.

#include
използвайки пространство от имена std ;
вътр основен ( )
{
вътр Не ;
cout << 'Моля, въведете число' ;
храня се >> Не ;
cout << 'Въведената стойност е: ' << Не << ' ' ;
}

Ще включим заглавния файл . След това ще използваме пространството от имена „std“ в стандартното пространство от имена. Ще наречем функцията main(). В рамките на този метод ще бъде декларирана променлива с име „no“. Типът данни „int“ е представен за тази променлива. Терминът 'int' е съкращението на цяло число. След това се използва операторът „cout“. Тази команда отпечатва реда.

Потребителят ще въведе произволна стойност, след като този текст бъде показан на екрана. Тогава изразът „cin“ щеше да бъде използван. Тази команда изисква потребителят да посочи стойността. Въведеният от потребителя номер ще бъде записан в променлива. Стойността, предоставена от потребителя, ще бъде показана на екрана с помощта на командата „cout“.

Пример 2

В този случай ще видим как получаваме произволно име от потребителя и след това ще го покажем на екрана като резултат.

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

вътр основен ( )

{

въглен име [ 125 ] ;
cout << 'Въведете вашето име' << endl ;


храня се >> ws ;

храня се . getline ( име, 125 ) ;

cout << име << endl ;

връщане 0 ;

}

Бихме включили заглавния файл . След това ще използваме стандартното пространство от имена като „std“. Ще извикаме функцията main(). В рамките на този метод ще декларираме променлива. Тази променлива съдържа типа данни „char“. След това се използва операторът „cout“. Тази команда показва текста „Въведете вашето име“ на екрана. След показване на този текст на екрана, потребителят ще въведе произволно име. След това ще използваме израза „cin“.

Тази команда взема стойността от потребителя. Предоставеното име ще бъде съхранено в променлива „ws“. Тук отново ще използваме командата „cin“. В рамките на тази команда се прилага функцията getline(). Тази функция съдържа параметър, който включва името, въведено от потребителя, и дължината на името. Командата „cout“ ще се използва за показване на името, предоставено от потребителя. За да прекратите кода, ще се използва командата „return 0“.

Заключение

Първо говорихме какво представляват C++ istream функциите. След това наблюдаваме няколко споменати функции и важни дефиниции. В тази статия изпълнихме различни кодове, които съдържат различни istream функции. В първия код вземаме произволен номер от потребителя и го показваме на екрана. Във втория потребителят въвежда името и го отпечатва на екрана.