Параметризовані маніпулятори
Нижче перераховані маніпулятори, що вимагають задання аргументу. Для їх використання потрібно підключити до програми файл заголовків <iomanip.h>.
setbase(int n) — задає основу системи числення (n = 8, 16, 10 або 0).;
resetiosflags(long) — скидає прапорці стану потоку, біти яких встановлені в параметрі;
setiosflags(long) — встановлює прапорці стану потоку, біти яких в параметрі рівні 1;
setfill(int) — встановлює символ-заповнювач з кодом, рівним значенню параметра;
setprecision(int) — встановлює максимальну кількість цифр в дробовій частині для дійсних чисел;
setw(int) — встановлює максимальну ширину поля .
Приклад використання параметризованих маніпуляторів:
#include <iostream.h>
#іnclude <iomanip.h>
int main() {
double d[] = (1.234, -12.34567, 123.456789, -1.234, 0.00001};
cout << setfill ( '.' ) << setprecision (4)
<< setiosflags(ios :: showpoint | ios :: fixed);
for (int і = 0; i < 5; i++)
cout << setw(12) << d[i] <<endl;
return 0; }
Результат роботи програми:
......1.2340
....-12.3457
....123.4568
.....-1.2340
......0.0000
Методи обміну з потоками
У потокових класах поряд із операціями >> та << визначені методи для неформатованого читання і запису в потік (при цьому перетворення даних не виконуються).
Нижче наведені функції читання, визначені в класі istream.
gcount() — повертає кількість символів, за допомогою останньої функції неформатованого введення:
get() — повертає код вилученого потоку символу або ЕOF;
get(c) — повертає на потік, з якого виконувалося читання, і записує зчитаний символ в с;
get (buf, num, lim = '\n' ) – зчитує num-1 символів (або поки не зустрінеться символ lim) і копіює їх в символьний рядок buf. Замість символу lim в рядок записується ознака кінця рядка ('\ n '). Символ lim залишається в потоці. Повертає посилання на поточний потік;
getline(buf, num, lim = '\n') — аналогічна функції get, але копіює в buf і символ lim;
putback(c) — поміщає в потік символ с, який стає поточним при вилученні з потоку;
read(buf, num) — зчитує num символів (або всі символи до кінця файлу, якщо їх менше num) у символьний масив buf і повертає на поточний потік;
seekg(pos) — встановлює поточну позицію читання в значення pos;
seekg(offs,org) — переміщає поточну позицію читання на offs байтів, рахуючи від однієї з трьох позицій, визначених параметром org: ios::beg (від початку файлу). ios::cur (від поточної позиції) або ios::end (від кінця файлу);
tellg() — повертає поточну позицію читання потоку;
unget() — поміщає останній прочитаний символ в потоки повертає на поточний потік.
У класі ostream означені аналогічні функції для неформатованого запису:
flush() — записує вміст потоку на фізичний пристрій;
put(c) — виводить в потік символ с і повертає на потік;
seekg(pos) — встановлює поточну позицію запису в значення pos;
seekg (offs, org) — переміщає поточну позицію запису на offs байтів, рахуючи від однієї з трьох позицій, визначених параметром org: ios::beg (від початку файлу), ios::cur (від поточної позиції) або ios::end (від кінця файлу);
tellg() — повертає поточну позицію запису потоку;
write(buf, num) — записує в потік num символів з масиву buf і повертає на потік.
Приклад. Програма зчитує рядки з вхідного потоку в символьний масив.
#include <iostream.h>
int main(){
const int N = 20, Len = 100;
char str[N][Len];
int i = 0;
while (cin.getline(str[i], Len, '\n') && i<N)
{ //....
i++ ;}
return 0;}