- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
Программирование. Принципы и практика использования C++ Исправленное издание - Бьёрн Страуструп
Шрифт:
Интервал:
Закладка:
Поля также можно использовать при выводе строк и чисел с плавающей точкой. Рассмотрим пример.
cout << 12345 <<'|'<< setw(4) << 12345 << '|'
<< setw(8) << 12345 << '|' << 12345 << "|n";
cout << 1234.5 <<'|'<< setw(4) << 1234.5 << '|'
<< setw(8) << 1234.5 << '|' << 1234.5 << "|n";
cout << "asdfg" <<'|'<< setw(4) << "asdfg" << '|'
<< setw(8) << "asdfg" << '|' << "asdfg" << "|n";
Этот код выводит на печать следующие числа:
12345|12345| 12345|12345|
1234.5|1234.5| 1234.5|1234.5|
asdfg|asdfg| asdfg|asdfg|
Обратите внимание на то, что ширина поля не является инертным параметром. Во всех трех случаях первое и последнее числа по умолчанию выведены с максимальным количеством цифр, которые допускает текущий формат. Иначе говоря, если мы непосредственно перед выводом не укажем ширину поля, то понятие поля вообще не будет использовано.
ПОПРОБУЙТЕ
Создайте простую таблицу, содержащую фамилию, имя, номер телефона и адрес электронной почты не менее пяти ваших друзей. Поэкспериментируйте с разной шириной поля, пока не найдете приемлемый вид таблицы.
11.3. Открытие файла и позиционирование
В языке С++ файл — это абстракция возможностей операционной системы. Как указано в разделе 10.3, файл — это последовательность байтов, пронумерованных начиная с нуля.
Вопрос заключается лишь в том, как получить доступ к этим байтам. При работе с потоками iostream вид доступа определяется в тот момент, когда мы открываем файл и связываем с ним поток. Поток сам определяет, какие операции можно выполнить после открытия файла и каков их смысл. Например, когда мы открываем для файла поток istream, то можем прочитать его содержимое, а когда открываем для файла поток ostream, то можем записать в него данные.
11.3.1. Режимы открытия файлов
Файл можно открыть в одном из нескольких режимов. По умолчанию поток ifstream открывает файлы для чтения, а поток ofstream — для записи. Эти операции удовлетворяют большинство наших потребностей. Однако существует несколько альтернатив.
Режим открытия файла можно указать после его имени. Рассмотрим пример.
ofstream of1(name1); // по умолчанию ios_base::out
ifstream if1(name2); // по умолчанию ios_base::in
ofstream ofs(name, ios_base::app); // по умолчанию ofstream —
// для записи
fstream fs("myfile", ios_base::in|ios_base::out); // для ввода и вывода
Символ | в последнем примере — это побитовый оператор ИЛИ (раздел A.5.5), который можно использовать для объединения режимов. Опция app часто используется для записи регистрационных файлов, в которых записи всегда добавляются в конец.
В любом случае конкретный режим открытия файла может зависеть от операционной системы. Если операционная система не может открыть файл в требуемом режиме, то поток перейдет в неправильное состояние.
if (!fs) // Ой: мы не можем открыть файл в таком режиме
В большинстве ситуаций причиной сбоя при открытии файла для чтения является его отсутствие.
ifstream ifs("redungs");
if (!ifs) // ошибка: невозможно открыть файл readings для чтения
В данном случае причиной ошибки стала опечатка.
Обычно, когда вы пытаетесь открыть несуществующий файл, операционная система создает новый файл для вывода, но, к счастью, она не делает этого, когда вы обращаетесь к несуществующему файлу для ввода.
ofstream ofs("no-such-file"); // создает новый файл no-such-file
ifstream ifs("no-file-of-this-name"); // ошибка: поток ifs не нахо-
// дится в состоянии good()
11.3.2. Бинарные файлы
В памяти мы можем представить значение 123 как целое или как строку. Рассмотрим пример.
int n = 123;
string s = "123";
В первом случае число 123 интерпретируется как (двоичное) число. Объем памяти, который оно занимает, совпадает с объемом памяти, который занимает любое другое целое число (4 байта, т.е. 32 бита на персональном компьютере). Если вместо числа 123 мы выберем число 12345, то оно по-прежнему будет занимать те же самые четыре байта. Во втором варианте значение 123 хранится как строка из трех символов. Если мы выберем строку "12345", то для ее хранения нам потребуются пять символов (плюс накладные расходы памяти на управление объектом класса string). Проиллюстрируем сказанное, используя обычные десятичное и символьное представления, а не двоичное, как в памяти компьютера.
Когда мы используем символьное представление, то какой-то символ должен служить признаком конца числа, так же как на бумаге, когда мы записываем одно число 123456 и два числа 123 456. На бумаге для разделения чисел мы используем пробел. То же самое можно сделать в памяти компьютера.
Разница между хранением двоичного представления фиксированного размера (например, в виде типа int) и символьного представления переменного размера (например, в виде типа string) проявляется и при работе с файлами. По умолчанию потоки iostream работают с символьными представлениями; иначе говоря, поток istream считывает последовательность символов и превращает их в объект заданного типа. Поток ostream принимает объект заданного типа и преобразует их в последовательность записываемых символов. Однако можно потребовать, чтобы потоки istream и ostream просто копировали байты из файла в файл. Такой ввод-вывод называется двоичным (binary I/O). В этом случае файл необходимо открыть в режиме ios_base::binary. Рассмотрим пример, в котором считываются и записываются двоичные файлы, содержащие целые числа. Главные сроки, предназначенные для обработки двоичных файлов, объясняются ниже.
int main()
{
// открываем поток istream для двоичного ввода из файла:
cout << "Пожалуйста, введите имя файла для ввода n";
string name;
cin >> name;
ifstream ifs(name.c_str(),ios_base::binary); // примечание: опция
// binary сообщает потоку, чтобы он ничего не делал
// с байтами
if (!ifs) error("Невозможно открыть файл для ввода ", name);
// открываем поток ostream для двоичного вывода в файл:
cout << "Пожалуйста, введите имя файла для вывода n";
cin >> name;
ofstream ofs(name.c_str(),ios_base::binary); // примечание: опция
// binary

