Добавил:
Оставь надежду всяк сюда поступивший Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Синников С++ / IV New hope.doc
Скачиваний:
63
Добавлен:
13.01.2019
Размер:
282.11 Кб
Скачать

34 Потоковый ввод/вывод

В языке С++ был разработан другой способ ввода/вывода с использованием так называемых потоков ввода и вывода.

Использование стандартных потоков cin и cout

Для того чтобы использовать стандартные потоки для ввода и вывода, необходимо включить заголовочный файл <iostream>. Для ввода используется операция >>, для вывода – операция <<. Компилятор определяет тип вводимой/выводимой переменной и соответствующим образом форматирует её.

#include <iostream>

using namespace std;

cin >> x; // Ввод значения в переменную x из стандартного потока cin

cout << x; // Вывод значения переменной x в стандартный поток cout

cin >> x >> y; // Ввод двух переменных

cout << "x = " << x << "\ny = " << y << endl; // Функция endl осуществляет перевод строки

Если при вводе или выводе произошла ошибка, в переменной состояния потока устанавливается соответствующий флаг. Проверить его значение можно с помощью функции fail.

cin >> x;

if (cin.fail())

cout << "Произошла ошибка при вводе\n";

35 Работа с файлами

Объявление файловой переменной

– FILE *file;

Открытие файла

– FILE *fopen(char *name, char *mode);

Проверка достижения конца файла

– int feof(FILE *file);

Закрытие файла

– int fclose(FILE *file);

FILE – специальная структура, объявленная в файле <stdio.h>, которая используется при работе с файлами. Для работы с файлом нужно объявить переменную FILE *<имя>.

Функция fopen используется для открытия файла. Первый параметр задаёт имя файла. Второй параметр mode задаёт требуемый тип доступа к файлу.

Mode Действие

"r" Открытие для чтения. Если файл не существует или не может быть найден, функция fopen возвращает признак ошибки.

"w" Открытие для записи. Если файл существует, его содержимое уничтожается. Если файл не существует, он создаётся.

"a" Открытие для добавления. Если файл не существует, он создаётся.

"r+" Открытие для чтения и записи. Файл должен существовать.

"w+" Открытие пустого файла для чтения и записи. Если файл существует, его содержимое уничтожается.

"a+" Открытие для чтения и добавления. Если файл не существует, он создаётся.

Кроме того, к параметру mode могут быть добавлены символы t и b для задания текстового и двоичного режимов соответственно. По умолчанию используется текстовый режим.

В случае ошибки функция fopen возвращает значение NULL.

1.3.1. Текстовый режим

При вводе/выводе в текстовом режиме происходит преобразование между внешним представлением значения и внутренним (машинным) представлением этого значения.

Ввод одного символа

– int getc (FILE *file);

Вывод одного символа

– int putc (int c, FILE *file);

Ввод

– int fscanf (FILE *file, char *format, ...);

Вывод

– int fprintf(FILE *file, char *format, ...);

Ввод строки

– char* fgets (char *line, int maxline, FILE *file);

Вывод строки

– int fputs (char *line, FILE *file);

1.3.2. Двоичный режим

В двоичном режиме никаких преобразований не производится, внутреннее представление значения записывается в файл. Для открытия файла в двоичном режиме необходимо в параметр mode функции fopen добавить символ b.

Ввод из двоичного файла

– unsigned fread (void *buf, int bytes, int num, FILE *file);

Вывод в двоичный файл

– unsigned fwrite (void *buf, int bytes, int num, FILE *file);

Функция fread читает из файла file в переменную buf num элементов, каждый размером bytes байт. Функция fwrite записывает в файл file из переменной buf num элементов, каждый размером bytes байт. Функции возвращают количество прочитанных/записанных элементов.

В двоичном режиме возможен прямой доступ к файлу:

int fseek(FILE *file, long nbytes, int origin)

Данная функция смещает указатель в файле file на nbytes байт с позиции, определяемой параметром origin. При этом параметр origin может принимать следующие значения:

SEEK_SET 0 – начало файла;

SEEK_CUR 1 – текущая позиция указателя;

SEEK_END 2 – конец файла.

Функция long ftell(FILE *file) возвращает текущую позицию указателя в файле file.

fseek(file, 0, SEEK_END);

n = ftell(file);

Соседние файлы в папке Синников С++