Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс лекцій.doc
Скачиваний:
15
Добавлен:
03.11.2018
Размер:
1.12 Mб
Скачать

12.5.5 Маніпулятори

Манiпулятори - це функцiї, якi можна включати в послiдовнiсть операцiй вводу/виводу. Iснує два типи манiпуляторiв - з параметрами та без параметрiв.

Манiпулятори без параметрiв(простi):

endl - помiщує в потiк символ переводу рядка;

ends - помiщує в вихiдний потiк нулевий символ(\0);

flush - примусово записує всi вихiднi данi на вiдповiднi фiзичнi пристрої;

dec - встановлює основу числа;

hex - встановлює основу числа;

oct -встановлює основу числа;

ws заставляє iгнгорувати при вводi пробiлові символи.

Приклад:

int i;

cin>>i;

if(!cin) cout<<“помилковий ввід”<<endl;

else{

cout<<"вивести в рiзних системах числення";

cout <<'hex:'<<hex<<i<<endl

<<'oct:'<<oct<<i<<endl

<<'dec:'<<dec<<i<<endl;

}

Параметризованi манiпулятори

1.setbase(int_b); задає основу(по замовчанню 10)

2.resetiosflags(long_b); -скидає прапорцi, бiти яких встановленi в переданому параметрi;

3.setiosflags(long_b); встановлює прапорцi бiти яких встановленi в переданому параметрi;

4.setfill(int_f); задає заповнюючий символ;

5.setprecision(int_n); задає значення внутрiшньої змiнної точностi дійсних чисел;

6.setw(int_w); задає значення внутрiшньої змiнної ширини поля.

Приклад:

double dbls[ ]={'.245,-12.99133};

cout <<setfill('.')

<<setprecision(4) //12.9913

<<setiosflags(ios::showpoint;

ios::fixed;

ios::right);

for (int i=0;i<2;i++)

cout <<setw(20)<<dbls[i]<<endl.

12.6 Стан потоку

Iснують рiзнi функцiї та операцiї, що дозволяють читати стан потоку, а також функцiї для установки чи очистки стану.

int rdstate(); - повертає бiжучий стан;

int eof(); -повертає ненульове значення, якщо встановлений прапорець eofbit;

int fail(); - повертає ненульове значення, якщо встановлений один з прапорцiв failbit,badbit,hardfail;

int bad(); - повертає ненульове значення, якщо встановлений прапорець badbit або hardfail;

int good(); - повертає ненульове значення, якщо скинутi всi бiти помилок;

void clear(int=0); якщо параметр дорiвнює 0 (по замовчанню ), всi бiти очи -щаються. В противному випадку параметр приймається в якостi стану помилки;

operаtor void*(); - повертає нулевий вказівник, якщо встановлений один з бітів failbit,badbit,hardfail;

int operator!(); - повертає ненульове значення, якщо встановлений один з бітів failbit,badbit,hardfail;

Відмітимо, що операція void*() неявно викликається завжди, коли потік порівнюється з нулем. Тому можна писати вирази виду:

while(srtmObj)

{

// з потоком все впорядку, можемо проводити операції вводу-виводу

}

Дiї над станами потоку

1.if(strm.rdstate() & ios::flag) - перевiряє чи встановлений flag

2.strm.clear(rdstate() & ~ios::flag) скинути flag

3.strm.clear(rdstate() | ios::flag ) - встановити flag

4.strm.clear(ios::flag) - встановити flag (скидає iншi прапорцi)

5.strm.clear() - скидає всi прапорцi.