
- •618 Глава 10
- •620 Глава 10
- •Глава 10
- •624 Глава 10
- •626 Глава 10
- •630 Глава 11 План
- •11.3. Вывод потоков
- •11.4. Ввод потоков
- •11.7. Состояния формата потоков
- •11.10. Связывание выходного потока с входным
- •11.1. Введение
- •632 Глава 11
- •11.2. Потоки
- •11.2.1. Заголовочные файлы библиотеки iostream
- •11.2.2. Классы и объекты потоков ввода-вывода
- •634 Глава 11
- •11.3. Вывод потоков
- •11.3.1. Операция поместить в поток
- •636 _ Глава 11
- •47 Плюс 53 равняется 100
- •11.3.2. Сцепление операций поместить в поток и взять из потока
- •47 Плюс 53 равняется 100
- •638 _ Глава 11
- •11.3.3. Вывод переменных типа char *
- •11.3.4. Вывод символов с помощью функции-элемента put; сцепленные выводы
- •11.4. Ввод потоков
- •11.4.1. Операция взять из потока
- •640 _ Глава 11
- •7 Не равно 5
- •8 Равно 8
- •11.4.2. Функции-элементы get и getline
- •642 Глава 11
- •644 Глава 11
- •11.4.3. Другие функции-элементы класса istream (peek, putback, ignore)
- •11.4.4. Сохранение типов данных при вводе-выводе
- •11.5. Неформатированный ввод-вывод с использованием read, gcount и write
- •11.6. Манипуляторы потоков
- •646 _ Глава 11
- •11.6.1. Манипуляторы потоков dec, oct, hex и setbase, задающие основание чисел
- •11.6.2. Точность чисел с плавающей запятой (precision,
- •11.6.3. Ширина поля (setw, width)
- •648 Глава 11
- •650 Глава 11
- •11.6.4. Манипуляторы, определяемые пользователем
- •11.7. Состояния формата потоков
- •11.7.1. Флаги состояний формата
- •Глава 11
- •11.7.2. Нулевые младшие разряды и десятичные точки
- •11.7.3. Выравнивание (ios::left, ios::right, ios::internal)
- •654 Глава 11
- •11.7.4. Заполнение (fill, setfill)
- •10000 Напечатанное как целое с выравниванием right и left и как шестнадцатеричное с выравниванием internal Использование заполняющего символа по умолчанию (пробела)
- •656 Глава 11
- •11.7.5. Основание системы счисления (ios::dec, ios::oct, ios::hex,
- •11.7.6. Числа с плавающей запятой; экспоненциальный формат (ios::scientific, ios::fixed)
- •658 Глава 11
- •11.7.7. Управление выводом в нижнем и верхнем регистрах
- •11.7.8. Установка и сброс флагов формата (flags, setiosflags
- •11.8. Состояния ошибок потока
- •11.9. Ввод-вывод определенных пользователем типов данных
- •Глава 11
- •После cin.Clear():
- •664 Глава 11
- •11.10. Связывание выходного потока с входным
- •Глава 11
- •Глава 11
- •670 Глава 11
- •672 Глава 11
- •674 Глава 11
- •676 Глава 11
- •1) Неверно. Поток cin связан со стандартным устройством ввода компьютера, обычно с клавиатурой.
- •0) Верно.
- •678 Глава 11
- •680 Глава 11
- •684 Глава 12
- •12.2. Шаблоны функций
- •686 Глава 12
- •Глава 12
- •12.3. Перегрузка шаблонных функций
- •12.4. Шаблоны классов
- •Глава 12
- •692 Глава 12
- •694 Глава 12
- •12.5. Шаблоны классов и нетиповые параметры
- •12.6. Шаблоны и наследование
- •12.7. Шаблоны и друзья
- •696 Глава 12
- •12.8. Шаблоны и статические элементы
- •Глава 12
- •700 Глава 12
- •702 Глава 12
- •704 Глава 13 План
- •13.1. Введение
- •706 Глава 13
- •708 Глава 13
- •13.2. Когда должна использоваться обработка исключений
- •13.3. Другие методы обработки ошибок
- •710 Глава 13
- •13.5. Простой пример обработки исключений: деление на нуль
- •712 Глава 13
- •13.6. Блоки try
- •13.7. Генерация исключений
- •714 Глава 13
- •13.8. Перехват исключений
- •716 Глава 13
- •718 Глава 13
- •13.9. Повторная генерация исключений
11.4.2. Функции-элементы get и getline
Функция-элемент get без аргументов вводит одиночный символ из указанного потока (даже, если это символ разделитель) и возвращает этот символ в качестве значения вызова функции. Этот вариант функции get возвращает EOF, когда в потоке встречается признак конца файла.
642 Глава 11
Программа на рис. 11.12 демонстрирует использование функций-элементов eof и get для ввода из входного потока cin и использование функции-элемента put для вывода в выходной поток cout. Сначала программа печатает значение cin.eof( ), т.е. 0 (ложь), чтобы показать, что конец файла в cin не достигнут. Пользователь вводит строку текста, завершающуюся признаком конца файла (<ctrl>-z с последующим <return> в ШМ-совместимых операционных система, <ctrl>-d — на компьютерах с ОС UNIX и Macintosh). Программа читает каждый символ и выводит его в cout, используя функцию-элемент print. Когда появляется признак конца файла, цикл while завершается и снова печатается значение cin.eof( ), равное теперь 1 (истина), чтобы показать, что в cin достигнут конец файла. Заметим, что программа использует вариант функции-элемента get класса istream, который не принимает никаких аргументов и возвращает введенный символ.
// figll_12.cpp
// Использование функций-элементов get, put и eof.
#include <iostream.h>
main () {
int с;
cout « "До ввода cin.eof() равняется " « cin.eof() « endl « "Введите предложение, завершающееся признаком конца файла:" « endl;
while ( ( с = cin.get() ) != EOF) cout.put(с);
cout « endl « "EOF в этой системе равняется " « с « endl; cout « "После ввода cin.eof() равняется " « cin.eof()
« endl; return 0;
}
До ввода cin.eof() равняется 0
Введите предложение, завершающееся признаком конца файла:
Проверка функций-элементов get и put^Z
Проверка функций-элементов get и put
EOF в этой системе равняется -1
После ввода cin.eof() равняется 1
Рис. 11.12. Использование функций-элементов get, put и eof
Другой вариант функции-элемента get с символьным аргументом вводит очередной символ из входного потока (даже, если это символ разделитель) и сохраняет его в символьном аргументе. Этот вариант функции get возвращает ложь, когда встречается признак конца файла; в остальных случаях этот вариант функции get возвращает ссылку на тот объект класса istream, для которого вызывалась функция-элемент get.
Третий вариант функции-элемента get принимает три параметра: символьный массив, максимальное число символов и ограничитель (по умолчанию значение '\n'). Этот вариант читает символы из входного потока до тех пор, пока не достигается число символов, на 1 меньше указанного макси-
Потоки ввода-вывода в С++ 643
мального числа, или пока не считывается ограничитель. Затем для завершения введенной строки в символьный массив, используемый в качестве буфера программы, помещается нулевой символ. Ограничитель в символьный массив не помещается, а остается во входном потоке (он будет следующим считываемым символом). Таким образом, результатом второго подряд использования функции get явится пустая строка, если только ограничитель не удалить из входного потока. Программа на рис. 11.13 сравнивает ввод, использующий для cin операцию взять из потока (которая читает символы до тех пор, пока не встречается символ разделитель), и ввод с помощью cin.get. Обратите внимание, что в обращении к cin.get не задается символ ограничитель, так что по умолчанию используется '\n'.
// figll_13. cpp
// Сопоставление ввода строки с помощью cin and cin.get.
#include <iostream.h>
const int SIZE = 80;
main() {
char bufferl[SIZE], buffer2[SIZE];
cout « "Введите предложение:" « endl; cin » bufferl;
cout « endl « "Из cin прочитана строка:" <<endl « bufferK< endl <<endl;
cin.get(buffer2, SIZE);
cout « "Строка, прочитанная с помощью cin.get:" « endl « buffer2 « endl;
return 0;
Введите предложение:
Сравнение ввода строки с помощью cin и cin.get
Из cin прочитана строка: Сравнение
j,gj^ Строка, прочитанная с помощью cin. get: ввод строки с помощью cin и cin.get
Рис. 11.13. Сравнение ввода строки из cin с помощью операции взять из потока и с помощью
cin.get
Функция-элемент getline действует подобно третьему варианту функции-элемента get и помещает нулевой символ после строки в символьном массиве. Но в отличие от get функция getline удаляет символ ограничитель из потока (т.е. читает этот символ и отбрасывает его); этот символ не сохраняется в символьном массиве. Программа, приведенная на рис. 11.14, демонстрирует использование функции-элемента getline для ввода строки текста.