ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 01.03.2019

Просмотров: 1169

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


Использование стандартных потоков 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);

36 Блочный Ввод-Вывод


Этот раздел описывает операции ввода и вывода на блоках данных. Вы можете использовать эти функции для чтения и записи двоичных данных, также как читать и писать текст блоками устанавливаемого размера - а не символами или строками.

Сохранение данных в двоичной форме часто значительно более эффективно чем использование форматируемых функций ввода - вывода. Также, для чисел с плавающей запятой, двоичная форма избегает возможной потери точности в процессе преобразования. С другой стороны, двоичные файлы не могут быть легко исследованы или изменяться, используя много стандартных файловых утилит (вроде текстовых редакторов), и не переносимы между различными реализациями языка, или различными видами компьютеров.

Эти функции объявлены в ' stdio.h '.

-Функция:size_t fread (void *data, size_t size, size_t count, FILE *stream)

Эта функция читает до count объектов размера size в массив. Она возвращает число прочитанных объектов, которое может быть меньше чем count, если происходит ошибка чтения, или достигнут конец файла. Эта функция возвращает значение нуль (и ничего не читает) если или size или count равен нулю.

Если fread достигает конца файла в середине объекта, она возвращает номер прочитанных полностью объектов, и отбрасывает несчитанные до конца.

-Функция: size_t fwrite (const void *data, size_t size, size_t count, FILE *stream)

Эта функция записывает до count объектов из массива данных в указанный поток. Возвращаемое значение - обычно count, если считывание успешно. Любой другое значение указывает какую-либо ошибку, например нехватку памяти.

КОНЕЦ ФАЙЛА и Ошибки

Многие из функций, описанных в этой главе возвращают значение макрокоманды EOF, указывающей неудачное завершение операции. Когда используется EOF, для сообщения о конце файла или о случайной ошибке, часто лучше использовать функцию feof, чтобы явно проверить конец файла и ferror, чтобы проверить наличие ошибки. Это контрольные индикаторные функции, которые являются частью внутреннего состояния объекта потока, индикаторы устанавливаются если соответствующее условие было обнаружено предыдущей операцией ввода - вывода на этом потоке.

Эти символы объявлены в заглавном файле ' stdio.h '.


- Макрос: int EOF

Этот макрос имеет целое значение, которое возвращается рядом функций, чтобы указать условие конца файла, или какую-нибудь другую ошибку. В библиотеке GNU, EOF имеет значение -1. В других библиотеках, значением может быть некоторое другое отрицательное число.

-Функция: void clearerr (FILE *stream)

Эта функция очищает индикаторы конца файла и ошибки для указанного потока. Позиционирующие файл функции (см. Раздел 7.15 [Позиционирование Файла]) также, очищают индикатор конца файла для потока.

-Функция: int feof (FILE *stream)

Функция feof возвращает отличное от нуля число, только если установлен индикатор конца файла для потока.

-Функция: int ferror (FILE *stream)

Функция ferror возвращает отличное от нуля число, только если индикатор ошибки для потока установлен, указывая что ошибка произошла на предыдущей операции на потоке.

В дополнение к установке индикатора ошибки, связанного с потоком, функции, которые работают с потоками, устанавливают errno таким же образом как соответствующие функции низкого уровня, которые работают с дескрипторами файла. Например, все функции, которые выполняют вывод в поток, такие как fputc, printf, и fflush, осуществлены в терминах записи, и все условия ошибки errno, определенные для записи, имеют значение и для этих функций. Для получения более подробной информации о функциях ввода - вывода на уровне дескрипторов, см. Главу 8 [ввод - вывод низкого уровня] 3.