Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на C / C++ / Нейбауэр А. Моя первая программа на С.doc
Скачиваний:
182
Добавлен:
02.05.2014
Размер:
3.75 Mб
Скачать

Проектирование программы

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

Например, вам может понадобиться просмотреть дисковый файл в поисках определенной записи. В этом случае следует открыть файл с режимом доступа "r", а потом использовать цикл для постепенного ввода данных, структура за структурой или строка за строкой в зависимости от того, к какому типу относится информация, записанная в файл. Во время каждого прохождения цикла значения вводимых данных сравниваются с искомыми. Для проверки значений строк используйте функцию strcmp(), конечно, если ваш компилятор это позволяет. Как только искомые данные найдены, они выводятся на экран, после чего файл закрывается.

Функции произвольного доступа

Компиляторы Си++ и многие компиляторы Си, поддерживающие стандарт ANSI, имеют функции произвольного доступа к файлу. Произвольный доступ означает, что вы можете перейти непосредственно к определенному месту файла для чтения или внесения изменений в данные, расположенные именно в этом месте. Перемещение указателя файла в заданную позицию выполняет функция fseek(). Если за ней следует, например, функция fread(), то она будет читать данные, начиная с позиции, отмеченной файловым указателем. Кроме того, функция ftell() сообщает текущее положение указателя, а функция rewind() переносит указатель в начало файла.

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

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

<>

Вопросы

  1. Что такое файловый буфер?

  2. Как используется файловая структура?

  3. Для чего в программах используют указатель на файл?

  4. Опишите, в чем заключаются различия между режимами доступа "r", "w" и "a"?

  5. Почему необходимо закрыть файл перед завершением работы программы?

  6. Как вы будете выводить числовые данные?

  7. Как напечатать данные на принтере?

  8. В чем заключается различие между функциями fprintf() и fwrite()?

  9. Как осуществить печать структур?

  10. Для чего служит функция sizeof()?

<>

Упражнения

  1. Напишите программу, в которой функция fputs() используется для создания файла, содержащего названия кинофильмов.

  2. Напишите программу, которая читает названия кинофильмов (упражнение1) в массив строк.

  3. Напишите программу, в которой функция fprintf() используется для создания файла инвентарной описи, содержащей сведения о наименовании товара, его цене и количестве единиц, имеющихся в наличии.

  4. Напишите программу, которая читает файл инвентарной описи, созданный в упражнении 3.

  5. Отредактируйте программы из упражнений 3 и 4 так, чтобы они читали данные как структуры.

  6. Объясните, почему следующая программа написана неверно:

#include "stdio.c"

main()

{

FILE fp;

char letter;

if ((fp = fopen("MYFILE", "w")) == NULL)

{

puts("Невозможно открыть файл");

exit();

}

do

{

letter = getchar();

fputc(letter, fp);

}

while(letter != '\n');

fclose(fp);

}