Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник 357.docx
Скачиваний:
27
Добавлен:
30.04.2022
Размер:
1.75 Mб
Скачать

Int fclose(указатель файла);

Работа с файлом обязательно включает следующие шаги:

1. Объявление указателя на используемый файл.

FILE *f_my;

2. Открытие файла и обработка возможных ошибок

if(!(f_my = fopen(“myfile.txt”, “r+t” ) ) ) {

puts(“\n Ошибка открытия файла!”);

return;

3. Работа с файлом

// последовательность операторов

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

fclose(f_my);

Прототипы большинства функций по обработке файлов описаны в библиотеках stdio.h и io.h.

Для работы с текстовыми файлами в консольном приложении удобнее всего пользоваться функциями fprintf() и fscanf(), параметры и выполняемые действия аналогичны функциям printf() и scanf(), только первым параметром добавлен указатель файла, к которому применяется данная функция:

int fprintf (FILE *stream, const char *template, ...).

int fscanf (FILE *stream, const char *template, ...)

14.2 Примеры программ работы с файлами

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

#include <stdio.h>

#include <locale.h>

int main()

{

int u, o, p;

double SrAref;

FILE *f, *f1;

setlocale(0, "Russian");

if ((f = fopen("input.txt", "rt")) != 0) {

printf("Открытие источника прошло успешно\n");

}

if ((f1 = fopen("output.txt", "wt")) != 0) {

printf("Открытие приемника прошло успешно\n");

}

printf("Сколько бы чисел вы бы хотели считать?\n");

scanf("%d", &u);

for (int i = 0; i < u; i++)

{

fscanf(f, "%d", &o);

fscanf(f, "%d", &p);

SrAref = double((o + p) / 2);

fprintf(f1, "%.2lf ", SrAref);

}

if (fclose(f1) == 0) printf("Закрытие приемника прошло успешно\n");

else return -1;

if (fclose(f) == 0) printf("Закрытие источника прошло успешно\n");

else return -1;

return 1;

}

Пример 2. Программа очистки кода программы на Си от комментариев

#include <stdio.h>

#include <locale.h>

int main()

{

FILE *in, *out;

char finp[256];

char fout[256];

char c, p,a;

int sig_comm;

setlocale(LC_ALL, "RUS");

printf("Приступайте к вводу имени файла\nИмейте ввиду если исходный файл находится в корневой папке программы,\nто вам понадобится лишь ввести имя файла и его расширение,\nиначе вам придется написать полный путь к исходному файлу: ");

scanf("%s", finp);

printf("Введите желаемое имя выходного файла:");

scanf("%s", fout);

if ((in = fopen(finp, "r")) == NULL)

{

printf("Файл %s невозможно открыть.\n", finp);

return 0;

}

if ((out = fopen(fout, "w")) == NULL)

{

printf("Файл %s невозможно создать.\n", finp);

return 0;

}

printf("Файлы успешно открыты, запускается алгоритм отчищения от комментариев.\n");

p = fgetc(in);

sig_comm = 0;

while (!feof(in))

{

c = fgetc(in);

if ((sig_comm == 0) && (c == '"') && (p=='('))

sig_comm = 3;

if ((sig_comm == 0) && (c == '*') && (p == '/'))

sig_comm = 2;

if ((sig_comm == 0) && (c == '/') && (p == '/'))

sig_comm = 1;

if (sig_comm == 0) fputc(p, out);

if ((sig_comm == 1) && (c == '\n'))

{

c = fgetc(in);

sig_comm = 0;

}

if ((sig_comm == 2) && (c == '/') && (p == '*'))

{

c = fgetc(in);

sig_comm = 0;

}

if (sig_comm == 3) fputc(p, out);

if ((sig_comm == 3) && (c == ')') && (p=='"'))

{

fputc(c, out);

c = fgetc(in);

sig_comm = 0;

}

p = c;

}

printf("Код отчищен от комментариев, производится закрытие файлов.\n");

fclose(in);

fclose(out);

printf("Файлы успешно закрыты.\nМожете просмотреть полученный код..\n");

system("pause");

}

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