У вас вопросы?
У нас ответы:) SamZan.net

Лабораторная работа 7 Работа с файловыми потоками в С

Работа добавлена на сайт samzan.net: 2016-06-20

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 6.4.2025

Лабораторная работа №7

Работа с файловыми потоками в С.
Текстовые файлы.

Цель работы: получить практические навыки решения задач с использованием текстовых файлов на языке С.

Теоретические сведения

Форматированный консольный ввод-вывод

Стандартная библиотека С содержит две функции, выполняющие форматированный ввод и вывод стандартных типов данных: printf() и scanf(). Термин форматированный подразумевает, что эти функции могут читать или писать данные в различных форматах, которыми можно управлять. Функция printf() используется для вывода данных на консоль, scanf() – для чтения данных с консоли. Как printf(), так и scanf() могут работать с любыми стандартными типами, включая символы, строки и числа.

Функция printf() имеет следующий прототип:

int printf(const char * форматная_строка, …);

Первый аргумент форматная_строка определяет способ вывода последующих аргументов. Он содержит два типа элементов: символы, выводимые на экран, и спецификаторы формата, определяющие способ вывода аргументов, следующих за форматной строкой. Спецификаторы формата приведены в таблице 1.

Таблица 1

Код

%c

%d

%i

%e

%E

%f

%g

%G

%o

%s

%u

%x

%X

%p

%n

%%

Формат

Символ

Знаковое десятичное целое число

Знаковое десятичное целое число

Научная нотация (e – строчная)

Научная нотация (E – строчная)

Десятичное число с плавающей точкой

Использует или %e, или %f, соответствующее более короткому представлению

Использует или %E, или %f, соответствующее более короткому представлению

Беззнаковое восьмеричное число

Строка символов

Беззнаковое десятичное число

Беззнаковое шестнадцатиричное число (строчные буквы)

Беззнаковое шестнадцатиричное число (прописные буквы)

Вывод указателя

Ассоциированный аргумент – это указатель на целое, в которое записывается число уже выведенных символов

Выводит знак %

Функция printf() возвращает число напечатанных символов. В случае ошибки она возвращает EOF.

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

int scanf(const char * форматная_строка, …);


форматная_строка определяет способ чтения значений в переменные, на которые указывает список аргументов. Форматная строка состоит из трёх типов символов:

  •  Спецификаторы формата
  •  Специальные символы
  •  Стандартные символы

Спецификаторы формата перечислены в таблице 2.

Таблица 2

Код

%c

%d

%i

%e

%f

%g

%o

%s

%x

%p

%n

%u

%[]

Значение

Читает одиночные символы

Читает десятичное число

Читает десятичное число

Читает число с плавающей запятой

Читает число с плавающей запятой

Читает число с плавающей запятой

Читает восьмеричное число

Читает строку

Читает шестнадцатиричное число

Читает указатель

Получает целочисленное значение, равное числу прочитанных символов

Читает беззнаковое целое

Сканирует множество символов

В scanf() следует передавать адреса. Это означает, что все аргументы должны быть указателями на переменные. Например, для чтения целого в переменную count надо использовать следующий вызов scanf():

scanf(“%d”, &count);

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

Файловая система ANSI C является частью системы ввода-вывода, позволяющей читать или записывать файлы. Она содержит несколько взаимосвязанных функций. Наиболее типичные показаны в таблице 3

Таблица 3

Имя

fopen()

fclose()

putc()

fputc()

getc()

fgetc()

fseek()

fprintf()

fscanf()

feof()

ferror()

rewind()

remove()

fflush()

Функция

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

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

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

Аналогично putc()

Читает символ из файла

Аналогично getc()

Переходит к указанному байту в файле

Делает то же в файл, что и printf() на консоль

Делает то же с файлом, что и scanf() c консолью

Возвращает истину при достижении конца файла

Возвращает истину при обнаружении ошибки

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

Стирает файл

Очищает буфер файла

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

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

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

Указатель на файл – это указатель на информацию, определяющую различные параметры файла, включая его имя, состояние и текущую позицию. В принципе, указатель на файл идентифицирует конкретный дисковый файл и используется потоком для выполнения операций ввода-вывода. Указатель на файл – это переменная-указатель типа FILE. Для создания файловой переменной-указателя используется оператор типа:

FILE *fp;

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

Функция fopen() открывает для использования поток, связывает файл с данным потоком и затем возвращает указатель FILE на данный поток. Чаще всего файл рассматривается как дисковый файл. Функция fopen() имеет следующий прототип:

FILE *fopen(const char *имя_файла, const char *режим);


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

Таблица 4

Режим

Значение

“r”

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

w

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

a

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

rb

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

wb

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

ab

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

r+”

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

w+”

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

a+”

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

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

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

Если необходимо открыть файл с именем test на запись, то следует написать:

fp = fopen(“test”, “w”);


где
fp – это переменная типа FILE *. Тем не менее обычно можно увидеть следующее:

if((fp = fopen(“test”, “w”))==NULL) {

puts(“Cannot open file.”);

exit(1);

}

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

Запись символа

Система ввода-вывода ANSI C определяет две эквивалентные функции, выводящие символ – putc() и fputc(). Функция putc() используется для записи символов в поток, ранее открытый для записи с помощью функции fopen(). Прототип для putc() следующий:

int putc(int ch, FILE *fp);


где
fp – указатель на файл, возвращённый fopen(), а ch – выводимый символ. По историческим причинам ch определена как int, но используется только младший байт.

Если putc() выполнена успешно, она возвращает выведенный символ. В противном случае возвращает EOF.

Чтение символа

Имеется две эквивалентные функции, предназначенные для ввода символа – getc() и fgetc(). Функция getc() используется для чтения символов из потока, открытого на чтение с помощью fopen(). Прототип getc() следующий:

int getc(FILE *fp);


где
fp – это указатель на файл типа FILE *, возвращённый fopen(). По традиции getc() возвращает целое, но старшие байты установлены в 0.

Функция getc() возвращает EOF при достижении конца файла.

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

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

Имеет прототип:

int fclose(FILE *fp);


где  
fp – это указатель на файл, возвращённый fopen(). Если возвращён 0, то операция закрытия выполнена успешно, а если EOF, то, значит, была ошибка.

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

int fpintf(FILE *fp, const char * форматная_строка, …);

int fscanf(FILE *fp, const char * форматная_строка, …);


где
fp – это указатель на файл возвращаемый fopen().

Требования к отчету.

Отчет должен содержать:

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

Контрольные вопросы:

  1.  Что такое поток?
  2.  Что представляет собой файловый указатель?
  3.  Перечислить режимы доступа к файлу.
  4.  Как открыть и как закрыть файл?

Лабораторное задание.

Для выполнения лабораторной работы необходимо составить программу согласно своему варианту задания.


Таблица вариантов

Номер варианта

Задание

1, 12, 23

Дан файл f, компоненты которого являются целыми числами. Записать в файл g, компоненты файла f, исключив повторные вхождения чисел.

2, 13, 24

Дан файл f, компоненты которого являются действительными числами. Найти:

  1.  наибольшее из значений компонент f;
  2.  наименьшее из значений компонент с четными номерами;
  3.  наибольшее из значений модулей компонент с нечетными номерами;
  4.  сумму наибольшего и наименьшего из значений компонент файла f;
  5.  разность первой и последней компонент файла f.

3, 14, 25

Дан символьный файл f. Подсчитать число вхождений в файл каждой из букв a, b, c, d, e, f.

Результат вывести в файл g в виде таблицы с комментариями.

4, 15, 26

Дан файл f, компоненты которого являются целыми числами. Записать в файл g все четные числа исходного файла, в файл h – все нечетные. Порядок следования чисел сохраняется. Записать в файл g и h комментарии.

5, 16, 27

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

6, 17, 28

Дан символьный файл f. Найти и записать в файл g самое длинное слово файла f, снабдив его комментарием.

7, 18

Дан файл f, компоненты которого являются целыми числами. Получить в файле g все компоненты файла f:

  1.  являющиеся четными числами;
  2.  делящиеся на 3 и не делящиеся на 7;
  3.  являющиеся точными квадратами.

Записать в файл g комментарий.

8, 19

Дан файл f. Создать два файла, записав в первый из них все четные числа, а во второй – все нечетные.

9, 20

Дан файл f. Создать два файла, записав в первый из них среднее геометрическое всех четных чисел, а во второй – среднее арифметическое всех нечетных чисел.

10, 21

Дан числовой файл f. Выбрать все значения, которые делятся нацело на 2 и 4, но не делятся на 6. Записать эти значения в файл g, а все остальные – в файл h.

11, 22

Дан текстовый файл f. Определить, являются ли первые два символа цифрами и если да, то четно ли это число. Записать его в файл g, если оно четно и в h ,если оно нечетно.

6




1. Мы разочарованы тем что переговоры между правительством и оппозицией оказались непродуктивными.
2. Тема- Зачем мы спим ночью Цели- помочь детям понять значение сна в жизни человека; совместно с детьми выра
3. Способы обработки экономической информации
4. Городская Мариинская больница РЕКОМЕНДАЦИИ ПО ПРОВЕДЕНИЮ ОБЯЗАТЕЛЬНЫХ ПРЕДВАРИТЕЛЬНЫХ ПРИ ПОСТУПЛ
5. Тема- ldquo;Симон Петлюраrdquo; П Л А Н Вступ Покли
6. сумма денежных средств необходимых для осуществления строительства в соответствии с проектными материала
7. Этика это философская дисциплина изучающая мораль и нравственность и определяющая присущуб данному общес
8. Вехи биографии Французский политолог социолог и публицист Раймон Арон родился 14 марта 1905 г
9. 001200 4-8 2200-3600 450 пробное -600 разовое
10. первых вы никогда на ней не останетесь голодным вовторых ее очень легко придерживаться не портя свой органи