Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOP / lectures / 4_oop.ppt
Скачиваний:
86
Добавлен:
03.03.2016
Размер:
726.53 Кб
Скачать

Эти байты не подвергаются какому-либо форматированию.

Если функция read() считывает меньшее

количество символов, то устанавливается флаг failbit.

Функция gcount() сообщает о количестве символов, прочитанных последней операцией ввода.

Пример. Неформатированный ввод-вывод.

int main() { char p[256];

cout<<"Ведите предложение:\n"; cin.read(p,20);

cout<<"\nВведенное предложение:\n"; cout.write(p,cin.gcount());

cout<<"\n\nФлаг failbit = "<<cin.fail()<<endl;

cout<<"Количество введенных символов: "<<cin.gcount()<<endl;

cout<<"Содержимое переменной p:\n"; cout<<p<<endl;

return 0;

}

Форматирование данных

 

Способы форматирования в

потоковых

классах:

 

- флаги;

 

- манипуляторы;

 

- форматирующие методы.

 

Манипуляторы потоков

Манипуляторы потоков – это идентификаторы, которые решают задачи форматирования.

Определённые в C++ манипуляторы потоков позволяют выполнить следующие операции:

-задание ширины полей;

-задание точности;

-установка и сброс флагов формата;

-задание заполняющего символа полей;

-сброс потоков;

-вставка символа новой строки и нулевого символа в выходной поток;

-пропуск символов разделителей во входном потоке.

Манипуляторы бывают параметризированные и непараметризированные.

Для использования параметризированных

манипуляторов необходимо подключить iomanip.h.

Можно определить собственные манипуляторы.

Манипуляторы потоков, задающие

основание чисел

dec, setbase(10) –числа в 10 с.с. oct, setbase(8) – числа в 8 с.с. hex, setbase(16) – числа в 16 с.с.

Пример. Вывод чисел в разных системах счисления.

int main() { int n=60;

cout<<"16 format: "<<hex<<n<<endl; n=100;

cout<<n<<endl;

cout<<"10 format: "<<dec<<n<<endl;

cout<<"8 format: "<<oct<<n<<endl; cout<<"16 format: "<<setbase(16)<<n<<endl;

return 0;

}

Манипуляторы потоков, задающие формат вывода вещественного числа

Число цифр после десятичной точки для

вещественного числа можно задать с помощью манипулятора потока setprecision или метода precision.

Вызов любой из этих установок точности действует для последующих операций вывода до тех пор, пока не будет произведена следующая установка точности.

В классе ios объявлено два перегруженных метода precision:

int ios::precision() – возвращает значение точности представления при выводе вещественных чисел;

int ios::precision(int) – устанавливает значение точности представления при выводе вещественных чисел, возвращает старое значение точности.

Пример. Вывод вещественных чисел с заданным количеством цифр после

десятичной точки.

#include <iostream>

#include <iomanip> using namespace std; int main() {

cout<<cout.precision()<<endl; cout.precision(10);

cout<<sqrt(3.0)<<endl; cout<<cout.precision()<<endl;

cout<<setprecision(4)<<sqrt(3.0)<<endl; return 0;

}

Установка ширины поля

Ширина поля – это число символьных позиций, в которые значение будет выведено, или число символов, которые будут выведены.

Задают:

-манипулятор setw(int w);

-метод int ios::width(int w).

Если обрабатываемые значения имеют меньше символов, чем заданная ширина поля, то для заполнения лишних позиций используются заполняющие символы.

Соседние файлы в папке lectures