Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ОАиП 2 Семестр / 7 файлы структуры

.doc
Скачиваний:
34
Добавлен:
21.03.2016
Размер:
192.51 Кб
Скачать

работа с файлами

До сих пор во всех наших программах ввод данных производился только с клавиатуры, а вывод – только на экран.

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

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

Прототипы функций для работы с файлами находятся в файле <stdio.h>.

Функция

Краткое описание

fopen()

Открыть файл

freopen()

Переоткрыть файл с другими правами доступа

Fclose()

Закрыть файл

fcloseall()

Закрыть все открытые файлы

fputc()

Записать символ в файл

fgetc()

Прочитать символ из файла

fputs()

Записать строку в файл

fgets()

Прочитать строку из файла

fprintf()

Форматированный вывод в файл

fscanf()

Форматированный ввод из файла

fwrite

Записать блок данных в файл

fread

Прочитать блок данных из файла

fflush()

Дозаписать определенный поток в файл

flushall()

Дозаписать все открытые потоки в файлы

feof()

Возвращает значение true (истина), если достигнут конец файла

fseek()

Установить указатель текущей позиции на определенный байт файла

ftell()

Получить значение указателя текущей позиции в файле

rewind()

Устанавить указатель текущей позиции в начало файла

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

Функция fopen() возвращает указатель файла – указатель на структурную переменную по шаблону FILE. Никогда не следует изменять значение этого указателя в программе. Если при открытии файла происходит ошибка, то fopen() возвращает пустой указатель (NULL).

Режимы открытия файла:

Режим

Описание

r

Открыть существующий файл для чтения

w

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

a

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

r+

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

w+

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

a+

Открыть файл для добавления или создать для чтения/записи, если он не существует. Чтение/запись допустимы в любом месте файла. При этом в отличие от режима "w+" можно открыть существующий файл и не уничтожать его содержимое; в отличие от режима "r+" в режиме "a+" можно вести запись в конец файла, то есть увеличивать его размеры.

Для указания на текстовый режим работы с файлом после любого из этих значений может быть добавлен символ ‘t’ (режим по умолчанию), для указания на бинарный режим – символ ‘b’. В бинарном режиме с файлами рекомендуется работать с помощью функций блокового ввода/вывода fread() и fwrite().

Имеетсятекстовый файл, содержащий информацию о мобил.телефонах: бренд, тип корпуса, кол-во sim-карт, разр.способность камеры

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

#include<stdio.h> #include<string.h> #include <conio.h> #include <windows.h>

main()

{

int i,n,kol,j;

char s[80],fn[10];

char proizv[20];

FILE *f,*f1;

struct Mob

{

char proizv[20];

char tip_korpus[20];

int sim;

float kamera;

};

Mob z[20];

puts("Enter file name");

gets(fn);

if((f=fopen(fn,"r"))==NULL)

puts("oshibka \n");

else

{

printf("File %s opened \n", fn);

puts("ishodn file");

puts("____________________________________________");

puts("! бренд ! тип корп ! к-во sim ! камера !");

puts("____________________________________________");

i=0;

while(!feof(f))

{

fscanf(f,"%s%s%d%f",&z[i].proizv,&z[i].tip_korpus,&z[i].sim,&z[i].kamera);

printf("!%-10s!%-10s!%-10d!%-10f !\n",z[i].proizv,z[i].tip_korpus,z[i].sim,z[i].kamera);

i++;

}

puts("____________________________________________");

n=i;

printf("v fail %d zapisi \n", n);

/* ******************************************/

puts("ENter file rezult");

gets(fn);

f1=fopen(fn,"w");

printf("FILE REZULTAT\n");

puts("____________________________________________");

puts("! ! ! ! !");

puts("____________________________________________");

for (i=0;i<n;i++)

{

printf("%-10s%-10s%-10d%-10f \n",z[i].proizv,z[i].tip_korpus,z[i].sim,z[i].kamera);

fprintf(f1,"!%-10s!%-10s!%-10d!%-10f \n",z[i].proizv,z[i].tip_korpus,z[i].sim,z[i].kamera);

}

puts("____________________________________________");

n=i;

printf("v fail %d zapisi \n", n);

// close the files

fclose(f);

fclose(f1);

}

printf("Press any key...");

getch();

return(0);

}

Соседние файлы в папке ОАиП 2 Семестр