Стандартные файлы и функции для работы с ними
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

Когда программа начинает выполняться, автоматически открываются несколько потоков, из которых основными являются:

- стандартный поток ввода (stdin);

- стандартный поток вывода (stdout);

- стандартный поток вывода об ошибках (stderr).

По умолчанию потоку stdin ставится в соответствие клавиатура, а потокам stdout и stderr ‑ монитор. Для ввода-вывода с помощью стандартных потоков используются функции:

- getchar()/putchar() – ввод-вывод отдельного символа;

- gets()/puts() – ввод-вывод строки;

- scanf()/printf() – форматированный ввод/вывод.

Символьный ввод-вывод

Для символьного ввода-вывода используются функции:

- int fgetc(FILE*fp), где fp – указатель на поток, из которого выполняется считывание. Функция возвращает очередной символ в форме int из потока fp. Если символ не может быть прочитан, то возвращается значение EOF.

- int fputc(int c, FILE*fp), где fp – указатель на поток, в который выполняется запись, c – переменная типа int, в которой содержится записываемый в поток символ. Функция возвращает записанный в поток fp символ в форме int . Если символ не может быть записан, то возвращается значение EOF.

Строковый ввод-вывод

Для построчного ввода-вывода используются следующие функции:

- char* fgets(char* s,int n,FILE* f), где char*s – адрес, по которому размещаются считанные байты, int n – количество считанных байтов, FILE* f – указатель на файл, из которого производится считывание. Считывание байт заканчивается после передачи n-1 байтов или при считывании символа "новая строка" (\n), который так же передается в буфер.

Строка в любом случае заканчивается '\0'. При успешном завершении считывания функция возвращает указатель на прочитанную строку, при неуспешном – NULL.

- int puts(char* s, FILE* f), где char*s – адрес, из которого берутся записываемые в файл байты, FILE* f – указатель на файл, в который производится запись.

Символ конца строки ('\0') в файл не записывается. Функция возвращает EOF, если при записи в файл произошла ошибка, при успешной записи возвращает неотрицательное число.

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

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

- int fprintf(FILE *f, const char*fmt, …) , где FILE*f – указатель на файл, в который производится запись, const char*fmt – форматная строка, … – список переменных, которые записываются в файл. Функция возвращает число записанных символов.

- 2) int fscanf(FILE *f, const char*fmt, par1,par2, …) , где FILE*f – указатель на файл, из которого производится чтение, const char*fmt – форматная строка, par1,par2, … – список переменных, в которые заносится информация из файла. Функция возвращает число переменных, которым присвоено значение.

Рекомендации по выполнению лабораторной работы

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

При считывании строк из текстового файла с помощью функции fgets() следует задавать входной буфер такого размера, чтобы в него гарантированно поместилась строка целиком, считая завершающий символ '\n' (который может отсутствовать только в последней строке файла) и нулевой байт в конце строки. Если учесть, что тестовые файлы создаются с помощью тестовых редакторов, то размер буфера 256 байт вполне достаточен для считывания строк.

Пример программы, считывающий строки из файла.

#include <stdio.h>

 

void main()

{

char s[256];

FILE *in;

in = fopen("myfile.txt","rt");

if(in != NULL)

{

while(fgets(in,256,s) != NULL) /* читаем до конца файла */

{

/*

здесь производится обработка считанной строки

*/

}

fclose(in); /* закроем файл */

}

}

При определении длин считанных строк нужно учитывать, что в конце строки находится символ '\n' (за исключением, может быть, последней строки файла), поэтому этот символ НЕ ДОЛЖЕН учитываться.

Содержание отчета

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

- задание лабораторной работы, соответствующее варианту

- структурную схему алгоритма программы и подпрограммы (подпрограмм)

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

- результаты работы программы

Лабораторная работа 9

Цель работы

Изучение принципов работы с двоичными файлами.

Задание

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

Задание
Преобразовать входной текстовый файл в выходной двоичный, содержащий записи следующего вида: данные типа int – длина строки; массив типа char – строка входного файла без завершающего символа '\n'.
Преобразовать входной текстовый файл в выходной двоичный, содержащий записи следующего вида: данные типа int – длина строки; массив типа char фиксированной размерности, равной длине максимальной строки,– строка входного файла без завершающего символа '\n'. До максимальной длины массив типа char дополняется байтами со значением 0.
Преобразовать входной текстовый файл в выходной двоичный, содержащий следующие данные: значение типа double – количество строк в файле; n массивов типа char, каждый из которых содержит строку входного файла без завершающего символа '\n' и заканчивается нулевым байтом.
Преобразовать входной текстовый файл в выходной двоичный, содержащий записи следующего вида: данные типа float – длина строки; данные типа int – количество слов в строке; массив типа char – строка входного файла без завершающего символа '\n'.
Преобразовать входной текстовый файл в выходной двоичный, содержащий данные следующего вида: значение типа int – количество строк в файле (n), n массивов типа char фиксированной размерности, равной длине максимальной строки,– строка входного файла без завершающего символа '\n'. До максимальной длины массив типа char дополняется пробелами.
Преобразовать входной текстовый файл в выходной двоичный, содержащий записи следующего вида: данные типа char – длина строки; данные типа char – количество букв в строке; данные типа int – сумма кодов символов строки; массив типа char – строка входного файла без завершающего символа '\n'.

ПРИМЕЧАНИЕ. В каждом задании после формирования выходного двоичного файла необходимо вывести на экран содержимое и размер полученного двоичного файла.

Теоретическая часть

Дата: 2016-10-02, просмотров: 311.