Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
3
Добавлен:
14.11.2017
Размер:
582.65 Кб
Скачать

Технология и языки программирования

Иллюстративный материал к проведению лабораторных работ по практическому освоению языка программирования С

Преподаватель

Бочаров Юрий Иванович

кафедра микронаноэлектроники НИЯУ МИФИ

Часть III

Работа с файлами. Функции языка С

Основные алгоритмы

Файлы

Файл это особым образом организованная именованная область памяти.

Будем различать файл логический – файловая переменная, буфер в оперативной памяти компьютера и файл физический – область на диске, имеющая имя.

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

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

Технология и языки программирования

2

Файлы

В соответствии с форматом хранимых данных и возможными операциями файлы бывают двух видов: текстовые и двоичные (бинарные)

Текстовые

Двоичные

Содержат текст, представленный двоично-кодированными символами, а также управляющие символы конца строк. Содержимое файла может быть прочитано текстовым редактором. Примерами являются файлы с расширениями .txt, .html

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

.exe, .jpg, .avi

Технология и языки программирования

3

Файлы

Мы будем работать только с текстовыми файлами из-за возможности простого контроля их содержимого путем просмотра любым текстовым редактором. Однако следует иметь в виду, что при сравнимом объеме хранимой информации размер двоичного файла всегда меньше, чем размер текстового файла, поскольку в текстовом файле каждый символ кодируется 8 битами.

Например, двоичная запись числа 65432 содержит 16 бит, а

строка из 7-ми символов ’6’, ’5’, ’4’, ’3’, ’2’,’\r’, ’\n’ содержит 56

бит, т.е. в 3,5 раза больше.

Символы ’\r’, ’\n’ (возврат к началу строки и переход на новую строку) обозначают конец строки в DOS-подобной операционной системе (ОС). Оконные приложения среды программирования Pelles C for Windows работают под управлением такой ОС, которая эмулируется средствами основной ОС Windows.

При записи и чтении чисел их преобразование в символы и обратно осуществляется автоматически по указанным форматам

Технология и языки программирования

4

Файлы

Типовая последовательность записи в файл

Объявление файловой переменной – указателя на файл FILE *f; // в слове FILE буквы заглавные!

Открытие файла для записи (write) в новый файл

f = fopen(”data.txt”, ”w”);

или для дозаписи (append) в существующий файл f = fopen(”data.txt”, ”a”);

Здесь data.txt – имя создаваемого файла на диске. Оно может быть любым допустимым в операционной системе именем - полным или кратким. Если имя краткое, то файл создается в текущей папке.

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

Запись данных (переменной целого типа x) в файл fprintf(f, ”%d”, x);

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

fclose(f); // обязательная операция!

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

Технология и языки программирования

5

Файлы

Типовая последовательность чтения из файла

Объявление файловой переменной – указателя на файл

FILE *g;

Открытие файла для чтения (read)

g = fopen(”data.txt”, ”r”);

Здесь data.txt – имя файла на диске. Предполагается, что он существует. Если файл открыть не удалось, то функция fopen() возвращает нулевой адрес (NULL).

Чтение данных (в адрес переменной целого типа y) fscanf(g, ”%d”, &y);

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

fclose(g);

После закрытия файла соответствующая файловая переменная освобождается и ее можно использовать для работы с другим файлом

Технология и языки программирования

6

Файлы

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

FILE *f;

f = fopen(”data.dat”, ”w”); if ( f == NULL )

{ printf(”Error opening file”); . . .

Причины, по которым файл не может быть открыт:

неверное имя файла

файл, имеющий атрибут «только для чтения»

конфликт с другой программой

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

FILE *f;

f = fopen(”data.dat", ”r”); if ( f == NULL )

{ printf(”Error opening file”); . . .

Причины, по которым файл не может быть открыт:

неверное имя файла Файл не существует

конфликт с другой программой

Технология и языки программирования

7

Файлы и случайные числа

Пример

Запись случайного количества случайных целых чисел в файл с контролем записываемых чисел выводом их на экран

Чтение записанных чисел из файла и вывод их на экран. Предполагается, что количество чисел в файле заранее не известно

Для генерации случайных (точнее - псевдослучайных) чисел используется стандартная функция rand() из библиотеки <stdlib.h>. Она возвращает целое беззнаковое случайное число в диапазоне от 0 до значения константы RAND_MAX, которая равна 1 703 741 823.

Для инициализации генератора служит функция srand(x), в качестве параметра которой задается начальное значение псевдослучайной последовательности. Это может быть произвольное число. В данном примере для инициализации используется возвращаемое значение функции time(NULL) из библиотеки <time.h>. Функция time(d) с параметром-указателем, соответствующим текущей дате и времени, возвращает число прошедших секунд с начала 1970 года. Если в качестве параметра указано нулевое значение указателя, то функция возвращает случайное число.

Технология и языки программирования

8

Файлы и случайные числа

Текст программы

#include <stdio.h> #include <time.h> #include <stdlib.h>

int main(void)

{

srand(time(NULL)); FILE *f;

f = fopen("rnd.dat", "w");

int n = rand() % 20; //random integer numbers from 0 to 19 int x = 0;

for (int i=1; i < n; i++)

{

x = rand() % 10; //random digits from 0 to 9 fprintf(f, "%d\n", x);

printf("%d\n", x);

}

fclose(f);

system("Pause"); //delay before window will be closed

//продолжение программы на следующем слайде

Технология и языки программирования

9

Файлы и случайные числа

продолжение текста программы

FILE *v;

v = fopen("rnd.dat", "r"); if (v==NULL)

{

printf("File is not found!");

}

else

{

int z =1;

while(z == 1) //one number was read successfully

{

z = fscanf(v, "%d", &x);

if (z == 1) printf("%d\n", x);

}

fclose(v);

}

return 0;

}

Операции записи в файл и чтения из файла очень похожи на соответствующие операции при работе с консолью (клавиатурой и дисплеем), поскольку работа с консолью также осуществляется с использованием файлов – стандартных файлов ввода и вывода (stdin, stdout)

Технология и языки программирования

10

Соседние файлы в папке Бочаров презентации 1 семестр