Программирование. Принципы и практика использования C++ Исправленное издание, стр. 153
Контрольные вопросы
1. Насколько разнообразными являются средства ввода и вывода у современных компьютеров?
2. Что делает поток
istream3. Что делает поток
ostream4. Что такое файл?
5. Что такое формат файла?
6. Назовите четыре разных типа устройств для ввода и вывода данных из программ.
7. Перечислите четыре этапа чтения файла.
8. Перечислите четыре этапа записи файлов.
9. Назовите и определите четыре состояния потоков.
10. Обсудите возможные способы решения следующих задач ввода.
10.1. Пользователь набрал значение, выходящее за пределы допустимого диапазона.
10.2. Данные исчерпаны (конец файла).
10.3. Пользователь набрал значение неправильного типа.
11. В чем ввод сложнее вывода?
12. В чем вывод сложнее ввода?
13. Почему мы (часто) хотим отделить ввод и вывод от вычислений?
14. Назовите две ситуации, в которых чаще всего используется функция
clear()istream15. Как определить операторы
<<>>XТермины

Упражнения
1. Напишите программу, вычисляющую сумму всех целых чисел, записанных в файле и разделенных пробелами.
2. Напишите программу, создающую файл из данных, записанных в виде объектов класса
Readingstore_temps.cppraw_temps.txt3. Напишите программу, считывающую данные из файла
raw_temps.txttemp_stats.cpp4. Модифицируйте программу store_temps.cpp из упр. 2, включив в нее суффикс c для шкалы Цельсия и суффикс
ftemp_stats.cpp5. Напишите функцию
print_year()6. Определите класс
Roman_intint<<>>Roman_intas_int()intrRoman_intcout << "Roman" << r << " равен " << r.as_int() << '\n';7. Разработайте вариант калькулятора из главы 7, который работал бы не с арабскими, а с римскими цифрами, например
XXI+CIV==CXXV8. Напишите программу, принимающую на вход имена двух файлов и создающую новый файл, содержащий первый файл, за которым следует второй; иначе говоря, программа должна конкатенировать два файла.
9. Напишите программу, принимающую на вход два файла, содержащие упорядоченные слова, разделенные пробелами, и объедините их, сохранив порядок.
10. Добавьте в калькулятор из главы 7 команду
from xxto yy11. Напишите программу, вычисляющую сумму целых чисел, хранящихся в текстовом файле и разделенных пробелами и словами. Например, после ввода строки “
bears: 17 elephants 9 end2612. Напишите программу, принимающую на вход имя файла и выводящую слова по одному на каждой строке, предваряя их номером строки. Подсказка: используйте функцию
getline()Послесловие
Большинство вычислений связано с переносом больших объемов данных из одного места в другое, например копирование текста из файла на экран или пересылка музыки из компьютера на MP3-плеер. Часто по ходу дела приходится производить определенные преобразования данных. Библиотека ввода-вывода позволяет решить многие из задач, в которых данные можно интерпретировать как последовательность (поток) значений. Ввод и вывод могут оказаться удивительно крупной частью программирования. Частично это объясняется тем, что мы (или наши программы) нуждаемся в больших объемах данных, а частично — тем, что точка, в которой данные поступают в систему, очень уязвима для ошибок. Итак, мы должны сделать ввод и вывод как можно более простыми и минимизировать возможность просачивания в нашу систему некорректных данных.
Глава 11
Настройка ввода и вывода
“Все должно быть как можно более простым,
но не проще”.
Альберт Эйнштейн (Albert Einstein)
В этой главе мы обсудим, как адаптировать потоки ввода-вывода, описанные в главе 10, к конкретным потребностям и вкусам. Это связано со множеством деталей, которые обусловлены тем, как люди читают тексты, а также с ограничениями на использование файлов. Заключительный пример иллюстрирует проект потока ввода, в котором можно задавать собственный набор операторов.
11.1. Регулярность и нерегулярность
Библиотека ввода-вывода является частью стандартной библиотеки языка С++. Она обеспечивает единообразную и расширяемую базу для ввода и вывода текста. Под словом “текст” мы подразумеваем нечто, что можно представить в виде последовательности символов. Таким образом, когда мы говорим о вводе и выводе, то целое число
12341234До сих пор мы не делали различий между источниками входной информации. Однако иногда этого оказывается недостаточно. Например, файлы отличаются от других источников данных (например, линий связи), поскольку они допускают адресацию отдельных байтов. Кроме того, мы работали, основываясь на предположении, что тип объекта полностью определен схемой его ввода и вывода. Это не совсем правильно и совсем недостаточно. Например, при выводе мы часто хотим указывать количество цифр, используемых для представления числа с плавающей точкой (его точность). В данной главе описано много способов, с помощью которых можно настроить ввод и вывод для своих потребностей.