Читаем Язык программирования C++. Пятое издание полностью

     << "i: " << setw(12) << i << "next col" << '\n'

     << "d: " << setw(12) << d << "next col" << '\n'

     << setfill(' '); // восстанавливает стандартный символ заполнения

Вывод этой программы таков:

i:          -16next col

d:      3.14159next col

i: -16         next col

d: 3.14159     next col

i:          -16next col

d:      3.14159next col

i: -         16next col

d:      3.14159next col

i: -#########16next col

d: #####3.14159next col

Контроль формата ввода

По умолчанию операторы ввода игнорируют символы отступа (пробел, табуляция, новая строка, новая страница и возврат каретки).

char ch;

while (cin >> ch)

 cout << ch;

Этот цикл получает следующую исходную последовательность:

a b     с

d

Он выполняется четыре раза, читая символы от а до d, пропуская промежуточные пробелы, возможные символы табуляции и новой строки. Вывод этой программы таков:

abcd

Манипулятор noskipws заставляет оператор ввода читать, не игнорируя отступ. Для возвращения к стандартному поведению применяется манипулятор skipws:

cin >> noskipws; // установить cin на чтение отступа

while (cin >> ch)

 cout << ch;

cin >> skipws; // возвратить cin к стандартному игнорированию отступа

При том же вводе этот цикл делает семь итераций, читая отступы как символы во вводе. Его вывод таков:

a b     с

d

Упражнения раздела 17.5.1

Упражнение 17.34. Напишите программу, иллюстрирующую использование каждого манипулятора из табл. 17.17 и 17.18.

Упражнение 17.35. Напишите версию программы вывода квадратного корня, но выводящую на сей раз шестнадцатеричные цифры в верхнем регистре.

Упражнение 17.36. Измените программу из предыдущего упражнения так, чтобы различные значения с плавающей точкой выводились в столбце.

<p>17.5.2. Не форматированные операции ввода-вывода</p>

До сих пор в программах использовались только операции форматированного ввода-вывода (formatted IO). Операторы ввода и вывода (<< и >>) форматируют читаемые и выводимые данные согласно их типу. Операторы ввода игнорируют отступ; операторы вывода применяют дополнение, точность и т.д.

Библиотека предоставляет также набор низкоуровневых функций не форматированного ввода-вывода (unformatted IO). Эти функции позволяют работать с потоком как с последовательностью неинтерпретируемых байтов.

Однобайтовые операции

Некоторые из не форматированных операций имеют дело с обработкой потока по одному байту за раз. Они описаны в табл. 17.19 и читают данные, не игнорируя отступ. Например, функции не форматированного ввода-вывода get() и put() позволяют читать и записывать символы по одному:

char ch;

while (cin.get(ch))

 cout.put(ch);

Эта программа сохраняет отступ во вводе. Ее вывод идентичен вводу. Она работает так же, как и предыдущая программа, использовавшая манипулятор noskipws.

Таблица 17.19. Однобайтовые низкоуровневые функции ввода-вывода

is.get(ch)Помещает следующий байт из потока is класса istream в символьную переменную ch. Возвращает поток is
os.put(ch)Помещает символ ch в поток os класса ostream. Возвращает поток os
is.get()Возвращает следующий байт из потока is как тип int
is.putback(ch)Помещает символ ch назад в поток is; возвращает поток is
is.unget()Перемещает в поток is один байт; возвращает поток is
is.peek()Возвращает следующий байт как тип int, но не удаляет его
Возвращение во входной поток

Иногда необходимо читать отдельные символы так, чтобы знать, к чему быть готовым. В таких случаях символы желательно возвращать в поток. Библиотека предоставляет три способа сделать это, и у каждого из них есть свои отличия.

• Функция peek() возвращает копию следующего символа во входном потоке, но не изменяет поток. Возвращенное значение остается в потоке.

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных