Средства управления экраном и клавиатурой

В C++ нет встроенных средств ввода-вывода. Альтернативой этому служит наличие библиотек ввода-вывода. Рассмотрим библиотеку iostream, имеющую средства управления экраном и клавиатурой.

Базовая библиотека ввода-вывода потоков iostream обладает улучшенной гибкостью и элегантностью по сравнению с другими библиотеками ввода-вывода,например, с stdio. Поэтому, настоятельно рекомендуем пользоваться этой библиотекой. Библиотека построена в виде иерархии классов.

Потоковый ввод может применятся с стандартным входным потоком cin(клавиатура). Для выполнения ввода используется перегруженная операция ">>" - операция извлечения.

cin>>per; //p - переменная базовых типов.

С клавиатуры читается последовательность символов до пробела, преобразуется к типу per и помещается в per.

Потоковый вывод применяется со стандартным выходным потоком cout(экран дисплея). Для выполнения вывода используется перегруженная операция "<<" - операция вставки.

cout<< per;//per-перем.,выражение,константа базовых типов.

Значение per преобразуется в последовательность символов и выводится на экран.

Несколько операторов вывода с операцией вставки (<<) можно объединять в один (сцеплять). Тоже относится и к операции извлечения, но при вводе необходим разделитель-пробел.

Форматирование ввода/вывода в библиотеке iostream.h выполняется флагами форматирования и некоторыми функциями, заданными в классе ios. Перечислим флаги форматирования:

---------------------------------------------------------------------------------

Поле Флаг Действия

---------------------------------------------------------------------------------

ios::adjustfield ios::left Прижим влево

ios::right Прижим вправо

ios::basefield ios::dec Вывод целого десятичного

ios::oct Вывод целого восьмеричного

ios::hex Вывод целого шестнадцатиричного

ios::floatfield ios::fixed Вывод с фиксированной точкой

ios::scientific Вывод с плавающей точкой

ios::skipws Пропуск пробелов при вводе

ios::showbase Вывод целых чисел с основанием

системы счисления

ios::showpoint Вывод вещественных с десятич-

ной точкой и хвостовыми нулями

ios::showpos Вывод положительных чисел с +

ios::uppercase Вывод прописных X и E

Перечислим функции форматирования класса ios.

- Установка флагов форматирования:

seft(flag) - для флагов без поля форматирования;

seft(flag,pole) - для флагов с полем форматирования.

Примеры:

cout.setf(ios::showpos);

cout.setf(ios::fixed,ios::floatfield);

cout.setf(ios::showpoint|ios::uppercase);//Несколько флагов

- Сброс флагов форматирования: unsetf(flag);

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

width(n) - устанавливает ширину поля n позиций и возвращает предыдущую ширину;

width() - только возвращает текущую ширину поля.

Пример:

cout.width(5);

cout<<123; //__123

cout<<456; //456 ширина поля сбросилась в ноль

- Установка символа-заполнителя:

fill(ch) - устанавливает символ-заполнитель ch и возвращает предыдущий;

fill() - только возвращает текущий символ-заполнитель. По умолчанию - пробел.

Пример:

cout.fill('*');

cout.width(5);

cout<<123; //**123

- Установка точности вещественных чисел:

precision(n) - устанавливает n цифр после точки и возвращает предыдущее значение;

precision() - только возвращает точность. По умолчанию точность равна 6 и хвостовые нули усекаются. Если после точки имеются только нули, то усекаются хвостовые нули и точка.

Пример:

cout.precision(2);

cout<<1.2345; //1.23

Альтернативным способом форматирования ввода/вывода является использование функций-манипуляторов:

dec - ввод/вывод целых десятичных чисел;

oct - ввод/вывод целых восьмеричных чисел;

hex - ввод/вывод целых шестнадцатиричных чисел;

setw(n) - установка ширины поля n;

setprecision(n) - установка точности n;

setfill(ch) - установка символа-заполнителя ch;

ws - извлечение пробелов при вводе;

endl - вставка символа новой строки и очистки потока(вывод);

ends - вставка конечного нулевого символа в строку(вывод);

setbase(n)-установка системы счисления при преобразованиях;

setiosflags(flag) - установка флагов форматирования flag;

resetiosflags(flag) - очистка флагов форматирования flag.

Манипуляторы могут быть записаны прямо в операциях ввода/вывода в виде цепочки. При использовании параметризированных манипуляторов необходимо включить в программу библиотеку iomanip.h.

Пример:

cout<<setw(7)<<setprecision(2)<<12.345 //__12.34

Основными средствами ввода/вывода библиотеки iostream.h являются операции вставки (<<) и извлечения (>>). Помимо операций вставки и извлечения для ввода/вывода можно использовать функции.

- Ввод с клавиатуры символа: get(ch) - функция с параметром; get() - функция без параметра.

cin.get(ch);

ch=cin.get();

- Ввод с клавиатуры строки: get(),getline(),read().

cin.get(buf,n[,razd]);

cin.getline(buf,n[,razd]);

cin.read(buf,n);

,где buf - массив символов, n -количество символов, razd -символ-разделитель.

Функция get прекращает ввод, когда либо введено n-1 символов, либо встретился символ-разделитель razd, который не вводится, либо - символ конца файла(^Z). Отличие функции getline от get в том, что символ-разделитель razd тоже вводится.

- Вывод символа на экран: put(ch).

cout.put(ch);

- вывод строки на экран: write().

cout.write(buf.n);

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

Для ввода с клавиатуры содержимого документов и вывода результатов задач на экран предпочтение лучше отдать операциям >> и <<. При вводе строки, имеющей внутри пробелы, операция извлечения (>>) введет только часть строки до первого пробела. В такой ситуации лучше использовать функции.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: