Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
http.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.34 Mб
Скачать

Подавление ввода

Можно заставить scanf() прочитать поле, но не присвоить его какой-либо переменной, поставив перед кодом формата поля *. Например, имея scanf ("%d%*c%d",    &x, &у); можно ввести пару координат 10,10. Запятая будет корректно прочитана, но ничему не присвоена. Подавление присваивания особенно полезно, когда необходимо обработать только часть вводимой информации.

Файловая система ansi с

Файловая система ANSI С является частью системы ввода/вывода, позволяющей читать или записывать файлы. Она содержит несколько взаимосвязанных функций. Наиболее типичные показаны в таблице. Заголовочный файл stdio.h должен включаться в любую программу, использующую данные функции.

Заголовочный файл stdio.h предоставляет прототипы для функций ввода/вывода и определяет три типа: size_t, fpos_t и FILE. Тип size_t - это беззнаковое целое, как и fpos_t. Тип FILE обсуждается в следующем разделе.

stdio.h также определяет несколько макросов. Наиболее значимыми для данной главы являются NULL, EOF, FOPEN_MAX, SEEK_SET, SEEK_CUR и SEEK_END. Макроопределение NULL -это нулевой указатель. Макроопределение EOF, как правило, определятся как -1 и его значение, возвращается, когда функция ввода пытается прочесть конец файла. Макроопределение FOPEN_MAX - это целочисленное значение, определяющее максимальное число одновременно открытых файлов. Другие макроопределения используются с функцией fseek(), выполняющей произвольный доступ к файлу.

Таблица: Наиболее типичные функции файловой системы ANSI С

Имя

Функция

open() fclose () putc() fputc() getc() fgetc() fseek() fprintf() fscanf() feof() ferror() rewind() remove() fflush()

Открывает файл Закрывает файл Записывает символ в файл Аналогично putc() Читает символ из файла Аналогично getc() Переходит к указанному байту в файле Делает то же в файл, что и printf() на консоль Делает то же с файлом, что и scanf() с консолью Возвращает истину при достижении конца файла Возвращает истину при обнаружении ошибки Сбрасывает индикатор позиции файла на начало файла Стирает файл Очищает буфер файла

Указатель на файл

Указатель на файл - это нечто, объединяющее файловую систему ANSI С. Указатель на файл - это указатель на информацию, определяющую различные параметры файла, включая его имя, состояние и текущую позицию. В принципе, указатель на файл идентифицирует конкретный дисковый файл и используется потоком для выполнения операций ввода/вывода. Указатель на файл - это переменная-указатель типа FILE. Чтобы прочитать или записать файлы, программе надо использовать указатели на файлы. Для создания файловой переменной-указателя используется оператор типа: FILE *fp;

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

Функция fopen() открывает для использования поток, связывает файл с данным потоком и затем возвращает указатель FILE на данный поток. Чаще всего файл рас­сматривается как дисковый файл. Функция fopen() имеет следующий прототип: FILE *fopen(const char *имя_файла, const char *режим); где режим указывает на строку, содержащую желаемый режим открытия файла. Допустимые зна­чения для режим в Borland С++ показаны в таблице. имя_файла должно быть строкой симво­лов, предоставляющей корректное имя файла операционной системе, и может содержать указа­ние пути.

Функция fopen() возвращает указатель базового типа FILE. Данный указатель идентифицирует файл и используется большинством функций файловой системы. Его никогда не следует изменять самостоятельно. Функция возвращает нулевой указатель, если файл не может быть открыт.

Как показывает таблица, файл может быть открыт или в текстовом, или в двоичном режи­ме. В текстовом режиме при вводе последовательность возврат каретки и перевод строки трансли­руется в символ новой строки. При выводе справедливо обратное: символ новой строки трансли­руется в возврат каретки и перевод строки. В двоичных файлах такого перевода не происходит. Когда в аргументе режима не указаны ни t, ни b, то статус файла текстовый/двоичный определя­ется значением глобальной переменной _fmode, определенной в Borland С++. По умолчанию fmode установлена в О_ТЕХТ, то есть устанавливается текстовый режим. Если установить _fmode в О_BINARY, то файлы будут открываться в двоичном режиме. (Эти макросы определены в fcntl.h.) Естественно, использование явно указанных t или b устраняет эффекты, связанные с переменной _fmode. Кроме этого, _fmode характерна только для продуктов Borland. Она не определена в системе ввода/вывода ANSI С.

Если необходимо открыть файл с именем test на запись, то следует написать: fp = fopen ("test", "w") ; где fp - это переменная типа FILE *. Тем не менее обычно можно увидеть следующее: if((fp = fopen("test", "w"))==NULL) { puts ("Cannot open file."); exit (1); } Данный метод позволяет обнаружить ошибки при открытии файла, например, наличие защиты от записи или отсутствие свободного места на диске.

Если fopen() используется для открытия файла на запись, то любой ранее существующий файл с указанным именем будет удален. Если файла с указанным именем не существует, то он будет создан.

Если необходимо дописать информацию в конец файла, следует использовать режим а (добавления). Если файл не существует, то он будет создан.

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

Таблица: Допустимые значения режимов

Режим

Значение

"r"

Открывает файл для чтения. (Открывает по умолчанию как текстовый файл.)

"w"

Создает файл для записи. (Открывает по умолчанию как текстовый файл.)

"а"

Присоединяет к файлу. (Открывает по умолчанию как текстовый файл.)

"rb"

Открывает двоичный файл для чтения.

"wb"

Открывает двоичный файл для записи.

"ab"

Присоединяет к двоичному файлу.

"r+"

Открывает файл для чтения/записи. (Открывает по умолчанию как текстовый файл.)

"w+"

Создает файл для чтения/записи. (Открывает по умолчанию как текстовый файл.)

"a+"

Присоединяет или создает файл для чтения/записи. (Открывает по умолчанию как текстовый файл.)

"r+b"

Открывает двоичный файл для чтения/записи.

"w+b"

Создает двоичный файл для чтения/записи.

"a+b"

Присоединяет или создает двоичный файл для чтения/записи.

"rt"

Открывает текстовый файл для чтения.

"wt"

Создает текстовый файл для записи.

"at"

Присоединяет к текстовому файлу.

"r+t"

Открывает текстовый файл для чтения.

"w+t"

Создает текстовый файл для чтения/записи.

"a+t"

Открывает или создает текстовый файл для чтения/записи.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]