Programmer’s Reference


ГЛАВА 13 – Стандартната система на С++ за I/O



страница13/19
Дата21.09.2016
Размер2.35 Mb.
#10416
1   ...   9   10   11   12   13   14   15   16   ...   19

ГЛАВА 13 – Стандартната система на С++ за I/O

Както обясних в предишната секция има две версии на библиотеката за I/O на С++ . Библиотеката в стар стил беше описана в предишната секция . Новата библиотека за I/O както е дефинирана от стандартизационния комитет



ANSI / ISO е описана тук .

Използване на новата iostream библиотека


Има две основни разлики между старата и новата iostream библиотеки . Първо библиотеката в стар стил беше дефинирана в глобалното именовано пространство . Новата стандартна iostream библиотека се съдържа във именованото пространстево std . Второ , старата библиотека използва хедърни файлове . Новата библиотека използва хедъри в нов стил ( които не използват ) . За да използвате новата стандартна iostream библиотека включете хедъра в нов стил < iostream > във вашата програма . След като направите това обикновенно ще искате да поставите библиотеката във текущото именовано пространство чрез използване израз като този :

using namespace std ;

След израза using и двете библиотеки старата и новата работят по еднакъв начин . Така не трябва да конвертирате много ( или нищо ) от вашия съществуващ код . Не е необходимо да използвате израза using само описателно . Вместо това може да включите точно определен определител за именовано пространство всеки път когато се обръщате към членовете на класовете за I/O Например следното изрично реферира cout :

std : : cout << “ This is a test “ ;

Разбира се ако извършвате широка употреба на iostream библиотеката включете израза using правещ нещата по – къси .


Базови класове за I/O


Новата iostream библиотека е дефинирана чрез комплексна йерархия от шаблонни класове . Вътрешно новата библиотека не използва същите имена на класове като старата библиотека . Например класовете от най – ниско ниво в старата библиотека са наречени streambuf и ios . В новата библиотека те са шаблонни класове наречени basic_streambuf и basic_ios . За щастие повечето от имената на класовете дефинирани в старата iostream библиотека се запазват от поредица typedef изрази които създават символно – базирани версии на I/O класовете . Това е частичен списък със съпоставящите се шаблонни имена на класове със техните символно – базирани версии :

Шаблонен клас Символно – базиран клас

basic_streambuf streambuf



basic_ios ios

basic_istream istream

basic_ostream ostream

basic_iostream iostream

basic_fstream fstream

basic_ifstream ifstream

basic_ofstream ofstream

Базираните на масиви I/O класове са също поддържани но не се одобряват . Нов код ще трябва да използва контейнерите описани в следващата секция . В добавка към символно – базираните класове , широко – символни I/O класове се също доставят със новата iostream библиотека . Техните имена са същите като на символно – базираните класове с изключение на това че започват със “ w “. Например wios е широко – символната версия на ios . Понеже огромното множество от програмистите ще използват символно – базиран I/O , това са класовете описани в тази книга . Така когато се обръщаме към I/O класовете просто ще използваме техните typedef символно – базирани имена по – често отколкото техните вътрешни шаблонни имена . В случая тази книга ще използва името ios отколкото basic_ios .


Предефинирани потоци в С++


Когато използвате новата iostream библиотека се отварят автоматично следните потоци :

Поток Значение

cin Стандартен вход



cout Стандартен изход

cerr Стандартен изход за грешки

clog Буферирана версия на cerr

wcin Широко символна версия на cin

wcout Широко символна версия на cout



wcerr Широко символна версия на

cerr

wclog Широко символна версия на

clog

По подразбиране , стандартните потоци се използват за комуникация със конзолата . Обаче в среди които поддържат пренасочване на I/O ( като DOS , UNIX и Windows ) стандартните потоци могат да бъдат пренасочени към други устройства или файлове .


Типа streamsize


Новата iostream библиотека дефинира няколко нови типа данни . Един от най – общите е наречен streamsize който е някаква форма на integer . Обект от тип streamsize е способен да съдържа най – големия брой байтове който ще бъде трансфериран в единствена операция за I/O .

Типа iostate


Текущото състояние на I/O потока е описано чрез обект от тип iostate , който е изброяване дефинирано в ios и включва тези членове :

Име Значение

goodbit Не са станали грешки



eofbit Срещнат е края на файла

failbit Станала е нефатална I/O грешка

badbit Станала е фатална I/O грешка

Форматни флагове и типа fmtflags


Всеки поток е свързан със множество от форматни флагове които контролират начина на форматиране на информацията в потока . Новата iostream библиотека декларира изброяване наречено fmtflags в което са декларирани следните стойности :

adjustfield floatfield right skipws basefield hex scientific unitbuf boolalpha internal showbase uppercase



dec left showpoint

fixed oct showpos

Тези стойности се използват за да установят или изчистят форматните флагове . Тези стойности са дефинирани в ios ( технически , изброяването fmtflags е дефинирано в ios_base , който е базов клас на basic_ios но тази разлика не е важна за повечето програмни ситуации ) . Когато флага skipws е вдигнат , водещите празни символи ( интервали , табулации и нови редове ) се отхвърлят когато изпълняваме вход в потока . Когато skipws е свален , празните символи не се отхвърлят . Когато left е вдигнат изхода е ляво подравнен . Когато е вдигнат right изхода е дясно подравнен . Когато е вдигнат internal числото се допълва до запълване на полето чрез вмъкване на интервали между всеки знак или основен символ . Ако никой от тези флагове не е вдигнат изхода е дясно подравнен по – подразбиране . По – подразбиране числените стойности се извеждат в десетичен формат . Обаче е възможно да променим числовата основа . Вдигането на флага oct предизвиква изхода да се показва в осмични числа . Вдигането на hex причинява изхода да бъде показван в шестнайсетични числа . За връщане към десетичната база вдигнете флага dec . Вдигането на showbase предизвиква да бъде показвана базата на числата . Например , ако установената база е шестнайсетична , стойността 1F ще бъде показана като 0x1F . По – подразбиране когато е показано научно означение е – то е малка буква . Също когато е показана шестнайсетична стойност , “ х “ е малка буква . Когато е вдигнат uppercase тези символи се показват с главни букви . Вдигането на showpos е причина водещия знак плюс да се показва пред положителните стойности . Вдигането на showpoint причинява десетичната точка и следващите я нули да бъдат показвани за всички извеждани числа с плаваща точка – когато е нужно или не е . Чрез вдигане на флага scientific числовите стойности със плаваща точка се показват чрез използване на научно означение . Когато fixed е вдигнат стойностите със плаваща точка се показват със използване на нормално означение . Когато никой флаг не е вдигнат , компилатора избира подходящия метод . Когато е вдигнат unitbuf , буфера се записва след всяка вмъкваща операция . Когато boolalpha е вдигнат , булевите стойности могат да бъдат въвеждани и извеждани чрез използване на ключовите думи true и false . Понеже обръщането към полетата oct , dec и hex е общо , те могат да бъдат общо представени като ios : : basefield . Също полетата left , right и internal могат да бъдат представени като ios : : adjustfield . Накрая , полетата scientific и fixed могат да бъдат представени като ios : : floatfield .

I/O манипулатори


В добавка към директното вдигане и сваляне на форматните флагове , можете да промените форматните параметри на потока чрез употребата на специални функции наречени манипулатори , които могат да бъдат включени в израз за I/O . Стандартните манипулатори са показани в следващата таблица ( някои от тези манипулатори не са поддържани от старата библиотека ) :

Манипулатор Предназначение Вход / изход

boolalpha Вдига флага boolalpha Вход / изход

dec Вдига флага dec Вход / изход

endl Извежда симол нов ред Изход

и записва потока



ends Извежда 0 Изход

fixed Вдига флага fixed Изход

flush Записва потока Изход

hex Вдига флага hex Вход / изход

internal Вдига флага internal Изход

left Вдига флага left Изход

noboolalpha Сваля флага boolalpha Вход / изход

noshowbase Сваля флага showbase Изход

noshowpoint Сваля флага showpoint Изход

noshowpos Сваля флага showpos Изход

noskipws Сваля флага skipws Вход

nounitbuf Сваля флага unitbuf Изход

nouppercase Сваля флага uppercase Изход

oct Вдига флага oct Вход / изход

resetiosflags ( long f ) Сваля флаговете Вход / изход

определени в f



right Вдига флага right Изход

scientific Вдига флага scientific Изход

setbase ( int base ) Установява числовата Изход

основа на base



setfill ( int ch ) Установява запълващия Изход

символ на ch



setiosflags ( long f ) Вдига флаговете Вход / изход

определени в f


setprecision ( int p ) Установява броя цифри Изход

за точността



setw ( int w ) Установява ширината на Изход

полето на w



showbase Вдига флага showbase Изход

showpoint Вдига флага showpoint Изход

showpos Вдига флага showpos Изход

skipws Вдига флага skipws Вход

unitbuf Вдига флага unitbuf Изход

uppercase Вдига флага uppercase Изход

ws Прескача водещитe празни Вход

интервали

За достъп до манипулаторите които приемат параметри такива като setw ( ) , ще трябва да включит < iomanip > във програмата .

Програмен съвет


Един от най – интересните форматни флагове добавени в новата iostream библиотека е boolalpha . Този флаг може да бъде вдигнат или директно или чрез вдигане на манипулаторите boolalpha ( ) или noboolalpha ( ) . Това което прави boolalpha ( ) интересен е че установяването му позволява да въвеждате и извеждате булеви стойности чрез използването на ключовите думи true и false . Обикновенно трябва да въвеждате 1 за true и 0 за false . Например разгледайте следната програма :

// Демонстрира форматния флаг boolalpha



# include < iostream >

using namespace std ;



int main ( )

{

bool b ;

cout << “ Before setting boolalpha flag : \n “ ;

b = true ;

cout << b << “ “ ;

b = false ;

cout << b << endl ;

cout << “ After setting boolalpha flag : \n “ ;

b = true ;

cout << boolalpha << b << “ “ ;

b = false ;

cout << b << endl ;

cout << “ Enter a Boolean value : “ ;

cin >> boolalpha >> b ;

cout << “ You entered “ << b ;
return 0 ;

}

Тук е примерен изход :

Before setting boolalpha flag : 1 0

After setting boolalpha flag : true false

Enter a Boolean value : true

You entered true

Както може да видите щом веднъж флага boolalpha бъде установен булевите стойности могат да се въвеждат и извеждат чрез думите true и false . Както показва програмата ще трябва да установите флага отделно за cin и cout . Като всички форматни флагове установявайки boolalpha за един поток не предполага че той също е установен за другите .


Стандартни iostream функции


Най – често употребяваните функции в нов стил са описани тук .

bad ( )


# include < iostream >

bool bad ( ) const ;

Функцията bad ( ) е член на ios . Функцията bad ( ) връща true ако е станала фатална I/O грешка в свързания поток , в противен случай се връща false . Свързана функция е good ( ) .


clear ( )


# include < iostream >

void clear ( iostate flags = goodbit ) ;

Функцията clear ( ) е член на ios . Функцията clear ( ) изчиства флаговете за състоянието свързани с поток . Ако flags е goodbit ( както е по – подразбиране ) тогава всички флагове за грешки се изчистват ( установяват се на 0 ) . В противен случай флаговете ще бъдат установени на стойността на flags . Свързана функция е rdstate ( ) .


eof ( )


# include < iostream >

bool eof ( ) const ;

Функцията eof ( ) е член на ios . Функцията еof ( ) връща true когато е достигнат края на свързания входен файл , в противен случай се връща false . Свързани функции са bad ( ) , fail ( ) , good ( ) , rdstate ( ) и clear ( ) .


fail ( )


# include < iostream >

bool fail ( ) const ;

Функцията fail ( ) е член на ios . Функцията fail ( ) връща true ако стане I/O грешка във свързания поток , в противен случай връща false . Свързани функции са good ( ) , eof ( ) , bad ( ) , clear ( ) и rdstate ( ) .


fill ( )


# include < iostream >

char fill ( ) const ;

char fill ( char ch ) ;

Функцията fill ( ) е член на ios . По подразбиране когато трябва да бъде запълнено поле , то се запълва със интервали . Обаче можете да промените запълващия символ чрез използване на функцията fill ( ) и определяйки новия запълващ символ в ch . Функцията ще върне стария запълващ символ . За да получите текущия запълващ символ , използвайте първата форма на fill ( ) , която връща текущия запълващ символ . Свързани функции са precision ( ) и



width ( ) .

flags ( )


# include < iostream >

fmtflags flags ( ) const ;

fmtflags flags ( fmtflags f ) ;

Функцията flags ( ) е член на ios . Първата форма на flags ( ) просто връща текущите форматни настройки на флаговете в свързания поток . Втората форма на flags ( ) установява всички форматни флагове свързани с поток чрез f . Когато използвате тази версия битовия шаблон открит в f се копира във форматните флагове свързани със потока . Тази версия също връща предишните настройки . Свързани функции са unsetf ( ) и setf ( ) .


flush ( )


# include < iostream >

ostream &flush ( ) ;

Функцията flush ( ) е член на ostream . Функцията flush ( ) предизвиква буфера свързан към определения изходен поток да бъде физически записан на диска . Функцията връща псевдоним към свързания със нея поток . Свързани функции са put ( ) и write ( ) .


fstream ( ) , ifstream ( ) и ofstream ( )


# include < fstream >

fstream ( ) ;

fstream ( const char *filename ,

openmode mode = ios : : in | ios : : out ) ;

ifstream ( ) ;

ifstream ( const char *filename ,

openmode mode = ios : : in ) ;

ofstream ( ) ;

ofstream ( const char *filename ,

openmode mode = ios : : out | ios : : trunc ) ;

fstream ( ) , ifstream ( ) и ofstream ( ) са конструкторите съответно на класовете fstream , ifstream и ofstream . Версиите без параметри на fstream ( ) , ifstream ( ) и оfstream ( ) създават поток който не е свързан със никакъв файл . Този поток може да бъде свързан към файл чрез използване на open ( ) . Версиите на fstream ( ) , ifstream ( ) и оfstream ( ) които приемат име на файл като първи параметър са най – често използвани в приложните програми . Въпреки че те са изцяло предназначени да отварят файл чрез използване на функцията

open ( ) , в повечето случай няма да го правите понеже тези fstream ( ) ,

ifstream ( ) и ofstream ( ) функции – конструктори автоматично отварят файла когато потока е създаден . Функциите конструктори имат еднакви параметри и действие като функцията open ( ) ( Виж “ open ( ) “ за детайли ) . Например , това е най – общия начин за отваряне на файл :

ifstream mystream ( “ myfile “ ) ;

Ако по някаква причина файла на може да бъде отворен , стойността на променливата на свързания поток ще бъде 0 . По тази причина и при използване на функция конструктор и при изрично определяне извикване на open ( ) , ще трябва да се уверите че файла действително е бил отворен чрез проверка стойността на потока . Типа openmode e дефиниран в класа ios_base . Виж “ open ( ) “ за детайли . Свързани функции са close ( ) и open ( ) .

gcount ( )


# include < iostream >

streamsize gcount ( ) const ;

Функцията gcount ( ) е член на istream . Функцията gcount ( ) връща броя на прочетените символи при последната входна операция . Свързани функции са get ( ) , getline ( ) и read ( ) .


get ( )


# include < iostream >

int get ( ) ;

istream &get ( char &ch ) ;

istream &get ( char *buf , streamsize num ) ;

istream &get ( char *buf , streamsize num , char delim ) ;

istream &get ( streambuf &buf ) ;

istream &get ( streambuf &buf , char delim ) ;

Функцията get ( ) е член на istream . Най – общо get ( ) чете символи от входния поток . Формата без параметри на get ( ) чете единствен символ от свързания поток и връща неговата стойност .



get ( char &ch ) прочита символ от свързания поток и слага стойността му в ch . Тя връща псевдоним за потока .

get ( char *buf , streamsize num ) прочита символите в масив указван от buf докато или num – 1 символа бъдат прочетени , достигнат е нов ред или е срещнат края на файла . Масива указван от buf ще бъде нулево – терминиран от get ( ) . Ако е срещнат символа нов ред във входния поток , той не се извлича . Вместо това остава в потока до следващата входна операция . Тази функция връща псевдоним за потока .

get ( char *buf , streamsize num , char delim ) прочита символите в масива указван от buf докато или num – 1 символа бъдат прочетени , символа определен от delim бъде открит или е срещнат края на файла . Масива указван от buf ще бъде нулево – терминиран от get ( ) . Ако се срещне разграничителния символ във входния поток , той не се извлича . Вместо това той остава в потока до следващата водна операция . Тази функция връща псевдоним за потока .

get ( streambuf &buf ) чете символи от входния поток във streambuf обект . Символите се четят докато се достигне нов ред или се срещне края на файла

Тази функция връща псевдоним за потока .



get ( streambuf &buf , char delim ) чете символи от входния поток във streambuf обект . Символите се четят докато се открие символа определен от delim или се срещне края на файла . Тази функция връща псевдоним за потока

Тя връща псевдоним за потока . Ако се срещне разграничителния символ във входния поток , той не се извлича .Свързани функции са put ( ) , read ( ) и



getline ( ) .

getline ( )


# include < iostream >

istream &getline ( char *buf , streamsize num ) ;

istream &getline ( char *buf , streamsize num , char delim ) ;

Функцията getline ( ) е член на istream .



getline ( char *buf , streamsize num ) чeте символите в масив указван от buf докато или num – 1 символа бъдат прочетени , достигнат е нов ред или е срещнат края на файла . Масива указван от buf ще бъде нулево – терминиран от getline ( ) . Ако се срещне символ за нов ред във входния поток , той се извлича , но не се слага във buf . Тази функция връща псевдоним за потока

getline ( char *buf , streamsize num , char delim ) чeтe символи в масив указван от buf докато или num – 1 символа бъдат прочетени , символа определен от delim бъде открит или е срещнат края на файла . Масива указван от buf ще бъде нулево – терминиран от getline ( ) . Ако се срещне разграничителния символ във входния поток , той се извлича но не се слага във buf . Тази функция връща псевдоним за потока . Свързани функции са get ( ) и read ( ) .

good ( )


# include < iostream >

bool good ( ) const ;

Функцията good ( ) е член на ios . Функцията good ( ) връща true ако не се срещнат I/O грешки във свързания поток , в противен случай връща false . Свързани функции са bad ( ) , fail ( ) , eof ( ) , clear ( ) и rdstate ( ) .


ignore ( )


# include < iostream >

istream &ignore ( streamsize num = 1 , int delim = EOF ) ;

Функцията ignore ( ) е член на istream . Вие може да използвате член - функцията ignore ( ) да чете и отхвърля символи от входния поток . Тя чете и отхвърля символи докато или бъдат отхвърлени num символа ( 1 по – подразбиране ) или се срещне символа определен от delim ( EOF по – подразбиране ) . Ако се срещне разграничителния символ , той се премахва от входния поток . Функцията връща псевдоним за потока . Свързани функции са get ( ) и getline ( ) .


open ( )


# include < fstream >

void fstream : : open ( const char *filename ,

openmode mode = ios : : in | ios : : out ) ;

void ifstream : : open ( const char *filename ,

openmode mode = ios : : in ) ;

void ofstream : : open ( const char *filename ,

openmode mode = ios : : out | ios : : trunc ) ;

Функцията open ( ) е член на fstream , ifstream и ofstream . Файл се свързва с поток чрез използване на функцията open ( ) . Тук , filename е името на файла което може да включва и пътя . Стойността на mode определя как да се отвори файла . Тя трябва да бъде една ( или повече ) от тези стойности :

ios : : app ios : : in

ios : : ate ios : : out

ios : : binary ios : : trunc

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



ios : : ate предизвиква търсене към края на файла до съвпадение когато файла е отворен . Въпреки че ios : : ate предизвиква отместване към края на файла I/O операциите могат да се извършат навсякъде във файла . Стойността ios : : binary предизвиква файла да бъде отворен за двоични I/O операции . По – подразбиране файл се отваря в текстов режим . Стойността ios : : in определя че файла има възможност за вход . Стойността ios : : out определя че файла има възможност за изход . Обаче създаването на поток със използване на ifstream подразбира вход , а създаването на файл чрез използване на ofstream е по – подразбиране изход и отварянето на файл със fstream означава вход / изход . Във всички случай ако open ( ) пропадне потока ще бъде 0 . По тази причина преди да използвате файл ще трябва да проверите да се уверите че отварящата операция е успешна . Свързани функции са close ( ) , fstream ( ) , ifstream ( ) и ofstream ( ) .

Програмен съвет


В библиотеката в стар стил , конструктора fstream не съдържа подразбираща се стойност за параметъра mode . Така той не отваря автоматично поток за входни и изходни операции . Така когато използвате старата библиотека за да отваряте поток за вход / изход и двете стойности ios : : in и ios : : out трябва да бъдат изрично определени . Запомнете го ако ви трябва обратна съвместимост.

peek ( )


# include < iostream >

int peek ( ) ;

Функцията peek ( ) е член на istream . Функцията peek ( ) връща следващия символ в потока или EOF ако е достигнат края на файла . Ако не е така при всички случай тя премахва символа от потока . Свързана функция е get ( ) .


precision ( )


# include < iostream >

streamsize precision ( ) const ;

streamsize precision ( streamsize p ) ;

Функцията precision ( ) е член на ios . По – подразбиране се показват шест цифри точност когато се извежда стойност със плаваща точка . Обаче със използването на втората форма на precision ( ) ще можете да установите това число на стойността определена в р . Връща се първоначалната стойност . Първата версия на precision ( ) връща текущата стойност . Свързани функции са width ( ) и fill ( ) .


put ( )


# include < iostream >

ostream &put ( char ch ) ;

Функцията put ( ) е член на ostream . Функцията put ( ) записва ch във свързания изходен поток . Тя връща псевдоним за потока . Свързани функции са write ( ) и get ( ) .


putback ( )


# include < iostream >

istream &putback ( char ch ) ;

Функцията putback ( ) е член на istream . Функцията putback ( ) връща ch във свързания входен поток . Свързана функция е peek ( ) .


rdstate ( )


# include < iostream >

iostate rdstate ( ) const ;

Функцията rdstate ( ) е член на ios . Функцията rdstate ( ) връща състоянието на свързания поток . Системата за I/O на С++ поддържа статус информация за резултата от всяка I/O операция отнасяща се до всеки активен поток . Текущото състояние на I/O системата се съдържа в обект от тип iostate в който са дефинирани следните флагове :



Име Значение

goodbit Не са станали грешки



eofbit Срещнат е края на файла

failbit Станала е нефатална I/O грешка

badbit Станала е фатална I/O грешка

Тези флагове са изброени във ios . rdstate ( ) връща goodbit когато не е станала грешка , в противен случай се установява бита за грешка . Свързани функции са eof ( ) , good ( ) , bad ( ) , clear ( ) и fail ( ) .


read ( )


# include < iostream >

istream &read ( char *buf , streamsize num ) ;

Функцията read ( ) е член на istream . Функцията read ( ) чете num байта от свързания входен поток и ги слага във буфер указван от buf . Ако е достигнат края на файла преди да са прочетени num символа , read ( ) просто спира и буфера ще съдържа колкото символа е имало ( Виж “ gcount ( ) “ ) . read ( ) връща псевдоним за потока . Свързани функции са gcount ( ) , get ( ) , getline ( ) и write ( ) .




seekg ( ) и seekp ( )


# include < iostream >

istream &seekg ( off_type offset , ios : : seekdir origin ) ;

istream &seekg ( pos_type position ) ;

ostream &seekp ( off_type offset , ios : : seekdir origin ) ;

ostream &seekp ( pos_type position ) ;

Функцията seekg ( ) е член на istream , a функцията seekp ( ) e член на ostream . В системата за I/O на С++ изпълнявате произволен достъп чрез използване на функциите seekg ( ) и seekp ( ) . Към този момент системата на С++ за I/O управлява два указателя свързани със файл . Единия е get pointer който определя къде във файла ще стане следващата входна операция . Другия е put pointer който определя къде във файла ще стане следващата изходна операция . Всеки път когато се извърши въвеждане или извеждане сътветния указател се увеличава автоматично в последователност . Обаче чрез използване на seekg ( ) и seekp ( ) е възможно да достигнете файла по непоследователен начин . Двупараметровата версия на seekg ( ) премества get pointer на offset брой байтове от мястото определено от origin . Двупараметровата версия на seekp ( ) премества put pointer на offset брой байтове от мястото определено от origin . Параметъра offset е от тип off_type който е способен да съдържа най – голямата валидна стойност която offset може да има . Параметъра origin е от тип seekdir и е изброяване което има тези стойности :



ios : : beg Отместване от началото

ios : : cur Отместване от текущата позиция

ios : : end Отместване от края

Еднопараметровите версии на seekg ( ) и seekp ( ) преместват файловите указатели на положението определено от position . Тази стойност трябва да бъде получена преди това чрез извикване на tellg ( ) или tellp ( ) съответно . pos_type е тип който е способен да съдържа най – голямата валидна стойност която може да има position . Тези функции връщат псевдоним за свързания поток . Свързани функции са tellg ( ) и tellp ( ) .

setf ( )


# include < iostream >

fmtflags setf ( fmtflags flags ) ;

fmtflags setf ( fmtflags flags1 , fmtflags flags2 ) ;

Функцията setf ( ) е член на ios . setf ( ) вдига форматните флагове свързани с поток . Виж разглеждането на форматните флагове по – рано в тази секция . Първата версия на setf ( ) вдига форматните флагове определени от flags

( всички други флагове са непроменени ) . Например за вдигане на флага showpos за cout може да използвате този израз :

cout . setf ( ios : : showpos ) ;

Когато искате да установите повече от един флаг можете да оградите заедно във кръгли скоби стойностите на флаговете които искате да установите . Важно е да разберете че извиквзнето на setf ( ) се отнася само за определения поток .Няма концепция за самостоятелно извикване на setf ( ) . Казано различно няма концепция в С++ за глобално форматно състояние . Всеки поток поддържа собствената си форматна статус информация индивидуално . Втората версия на setf ( ) въздейства само на флаговете които сте установили във flags2 . Съответните флагове първо са пренастроени и след това вдигнати съгласно флаговете определени от flags1 . Дори ако flags1 съдържа друго множество флагове , само онези определени от flags2 ще бъдат променени . И двете версии на setf ( ) връщат предишните настройки на форматните флагове свързани със потока . Свързани функции са unsetf ( ) и flags ( ) .

sync_with_stdio ( )


# include < iostream >

static bool sync_with_stdio ( bool sync = true ) ;

Функцията sync_with_stdio ( ) е член на ios . Извикването на sync_with_stdio ( ) позволява стандартната С – базирана система за I/O да бъде безопасно използвана едновременно със класово – базираната система на С++ за I/O . За премахване на синхронизацията със stdio , подайте false на sync_with_stdio ( ) . Връща се предишната настройка – true за синхронизиране и false ако няма синхронизация .


tellg ( ) и tellp ( )


# include < iostream >

pos_type tellg ( ) ;

pos_type tellp ( ) ;

Функцията tellg ( ) е член на istream , a функцията tellp ( ) e член на ostream . Системата за I/O на С++ управлява два указателя свързани със файл . Единия е get pointer който определя къде във файла ще стане следващата входна операция . Другия е put pointer който определя къде във файла ще стане следващата изходна операция . Всеки път когато се извърши въвеждане или извеждане сътветния указател се увеличава автоматично и последователно . Вие можете да определите текущата позиция на get pointer използвайки tellg ( ) и на put pointer използвайки tellp ( ) . pos_type е тип който е способен да съдържа най – голямата стойност която всяка от функциите може да върне . Стойностите върнати от tellg ( ) и tellp ( ) могат да бъдат използвани като параметри съответно на seekg ( ) и seekp ( ) . Свързани функции са seekg ( ) и seekp ( ) .


unsetf ( )


# include < iostream >

void unsetf ( fmtflags flags ) ;

Функцията unsetf ( ) е член на ios . Функцията unsetf ( ) се използва да свали един или повече форматни флага . Флаговете определени от flags се свалят

( всички други флагове остават непроменени ) . Свързани функции са setf ( ) и flags ( ) .

width ( )


# include < iostream >

streamsize width ( ) const ;

streamsize width ( streamsize w ) ;

Функцията width ( ) е член на ios . За да получите текущата ширина на полето използвайте първата форма на width ( ) . Taзи версия връща текущата ширина на полето . За да установите ширината на полето използвайте втората форма . Тук , w става новата ширина на полето , а се връща предишната стойност . Свързани функции са precision ( ) и fill ( ) .


write ( )


# include < iostream >

ostream &write ( const char *buf , streamsize num ) ;

Функцията write ( ) е член на ostream . Функцията write ( ) записва num байта в определения изходен поток от буфера указван чрез buf . Тя връща псевдоним за потока . Свързани функции са read ( ) и put ( ) .





Каталог: books
books -> Тайнствената сила на пирамидите Богомил Герасимов Страхът на времето
books -> В обятията на шамбала
books -> Книга се посвещава с благодарност на децата ми. Майка ми и жена ми ме научиха да бъда мъж
books -> Николай Слатински “Надеждата като лабиринт” София, Издателство “виденов & син”, 1993 год
books -> София, Издателство “Българска книжница”, 2004 год. Рецензенти доц д. ик н. Димитър Йончев, проф д-р Нина Дюлгерова Научен редактор проф д-р Петър Иванов
books -> Николай Слатински “Измерения на сигурността” София, Издателство “Парадигма”, 2000 год
books -> Книга 2 щастие и успех предисловие
books -> Превръщане на числа от една бройна система в друга
books -> Тантриското преобразяване


Сподели с приятели:
1   ...   9   10   11   12   13   14   15   16   ...   19




©obuch.info 2024
отнасят до администрацията

    Начална страница