Формат вывода вещественных значений выбирается автоматически в зависимости от выводимого значения.
Ввод символьных значений можно осуществлять только в виде одиночного символа. При вводе нескольких символов переменной c будет присвоен только первый символ. Могут возникнуть сложности с вводом русских букв.
5. Ввод/вывод логических значений осуществляется в числовом формате (0 - false, 1 - true).
Замечание:
При вводе числовых данных с клавиатуры могут возникать непредвиденные ошибки, вызванные вводом символов, недопустимых для числовых форматов. Например:
int i;
cin >> i;
При попытке ввода с клавиатуры числа 1234 допущена ошибка - набрано 12y34 и нажата клавиша ENTER (ошибочно была нажата клавиша y). Переменная i в этом случае будет содержать значение 12, и эта ошибка может привести к непредсказуемому дальнейшему поведению программы. В любом случае символы из потока ввода извлекаются оператором >> до тех пор, пока они соответствуют числовому формату. Как только в потоке ввода встречается символ, не соответствующий числовому формату, уже извлеченные символы преобразуются в числовое значение и присваиваются переменной ввода. Остальные символы игнорируются.
Форматирование ввода / вывода
В приведенных ранее примерах были использованы простейшие способы управления вводом/выводом с помощью специальных управляющих символов (ESCAPE последовательностей) - '\n' и '\t'. Однако, очень часто этого бывает недостаточно, например, для аккуратного структурированного оформления данных на экране.
Более гибкое управление вводом/выводом (форматирование ввода/вывода) в C++ осуществляется либо с помощью установки флагов форматирования, либо с помощью специальных манипуляторов ввода/вывода.
Использование флагов форматирования.
В этой таблице перечислены флаги форматирования.
Флаг
Числовое значение
Назначение
Действие
ios:: skipws
Отменяет ввод из потока лидирующих пробельных символов (пробелов, символов табуляции, символов перевода строки). Установлен по умолчанию.
ввод
ios:: unitbuf
Если буфер вывода не пуст, его содержимое передаются на устройство вывода сразу при завершении операции вывода.
вывод
ios:: uppercase
Отображает шестнадцатеричные цифры и символ экспоненты при выводе вещественных значений в верхнем регистре.
вывод
ios:: showbase
Отображает обозначение основания системы счисления, в которой выводится числовое значение. Например, если выводится значение A1F, то оно будет выведено в виде 0xA1F.
вывод
ios:: showpoint
Отображает при выводе вещественных значений десятичную точку и нули дробной части, даже если дробная часть отсутствует.
вывод
ios:: showpos
Приводит к отображению знака + при выводе положительных числовых значений.
вывод
ios:: left
Выравнивает вывод данных по левому краю поля вывода, дополняя данные справа пробелами (или установленными символами) до ширины поля вывода.
вывод
ios:: right
Выравнивает вывод данных по правому краю поля вывода, дополняя данные слева пробелами (или установленными символами) до ширины поля вывода
вывод
ios:: internal
Выводит знак числа с левым выравниванием, а само число с правым выравниванием. Между знаком и самим числом выводятся либо пробелы, либо установленные символы заполнения, дополняя выводимое значение до ширины поля вывода.
вывод
ios:: dec
Устанавливает десятичную форму представления целых чисел. Флаг установлен по умолчанию.
ввод/вывод
ios:: oct
Устанавливает восьмеричную форму представления целых чисел.
ввод/вывод
ios:: hex
Устанавливает шестнадцатеричную форму представления целых чисел.
ввод/вывод
ios:: scientific
Устанавливает формат вывода вещественных значений в формате с экспонентой. По умолчанию компилятор сам выбирает формат вывода (либо экспоненциальный, либо фиксированный).
вывод
ios:: fixed
Устанавливает формат вывода вещественных значений с фиксированной точкой. По умолчанию компилятор сам выбирает формат вывода (либо экспоненциальный, либо фиксированный).
вывод
ios:: boolalpha
По умолчанию логические значения представляются в виде 0 и 1. При установке этого флага эти значения представляются словами false и true.
ввод/вывод
Замечания:
1. Приставка ios:: указывает на то, что определение флага принадлежит классу ios, опускать ее не следует, иначе компилятор выдаст ошибку.