Открытие и закрытие потока
Прежде чем начать работать с потоком, его надо инициировать, т. е. открыть. При этом поток связывается со структурой предопределенного типа FILE, определение которой находится в библиотечном файле <stdio.h>. В структуре находится указатель на буфер, указатель на текущую позицию файла и т. п. При открытии потока, возвращается указатель на поток, т. е. на объект типа FILE.
#include <stdio.h>;
........
FILE *fp;
............
fp= fopen( ”t.txt”, ”r”);
где fopen(<имя_файла>,<режим_открытия>) - функция для инициации файла.
Существуют следующие режимы для открытия файла:
· ”w” - открыть файл для записи, если файл существует, то он стирается;
· ”r” - открыть файл для чтения;
· ”a” - открыть файл для добавления, если файл существует, то он не стирается и можно писать в конец файла;
· ”w+” - открыть файл для записи и исправления, если файл существует, то он стирается, а далее можно и читать, и писать, размеры файла можно увеличивать;
· ”r+” - открыть файл для чтения и записи, но увеличить размер файла нельзя;
· ”a+” - открыть файл для добавления, т. е. можно и читать и писать, в том числе и в конец файла.
Поток можно открыть в текстовом (t) или двоичном (b) режиме. По умолчанию - текстовый режим. В явном виде режим указывается следующим образом: ”r+b”или ”rb” - двоичный (бинарный) режим.
Пример:
if ((fp=fopen(”t.txt”, ”w”)==NULL)
{
perror(”\nошибка при открытии файла”); // выводит строку символов // с сообщением об ошибке
exit(0);
}
После работы с файлом, его надо закрыть:
fclose(<указатель_на_поток>);
Для построчного ввода - вывода используются следующие функции;
char *fgets(char *s, int n, FILE *F)
· char *s - адрес, по которому размещаются считанные байты;
· int n - количество считываемых байтов;
· FILE *fp - указатель на файл, из которого производится считывание.
Прием символов заканчивается после передачи n байтов или при получении "\n". Управляющий символ "\n" тоже передается в принимающую строку. В любом случае строка заканчивается "\0". При успешном завершении считывания, функция возвращает указатель на прочитанную строку, иначе возвращает NULL.
char *fputs(char *s, FILE *F)
· char *s - адрес, из которого берутся записываемые в файл байты;
· FILE *fp - указатель на файл, в который производится запись.
Пример:
int MAXLINE=255; //максимальная длина строки
FILE *in, //исходный файл
*out; //принимающий файл
char buf[MAXLINE]; //строка, с помощью которой выполняется копирование
//копирование строк одного файла в другой
while (fgets (buf, MAXLINE, in)!=NULL)
fputs(buf,out);
Постановка задачи
· Создать текстовый файл F1 не менее чем из 10 строк и записать в него информацию;
· Выполнить задание согласно своему варианту.
Варианты
1.
1) Скопировать в файл F2 только четные строки из F1.
2) Подсчитать размер файлов F1 и F2 (в байтах).
2.
1) Скопировать в файл F2 только те строки из F1, которые начинаются с буквы «А».
2) Подсчитать количество слов в F2.
3.
1) Скопировать в файл F2 только те строки из F1, которые начинаются и заканчиваются на одну и ту же букву.
2) Подсчитать количество символов в F2.
4.
1) Скопировать из файла F1 в файл F2 строки, начиная с 4.
2) Подсчитать количество символов в последнем слове F2.
5.
1) Скопировать из файла F1 в файл F2 строки, начиная с К до К+5.
2) Подсчитать количество гласных букв в файле F2.
6.
1) Скопировать из файла F1 в файл F2 строки, начиная с N до K.
2) Подсчитать количество согласных букв в файле F2.
7.
1) Скопировать из файла F1 в файл F2 все строки, кроме тех, что начинаются на букву А.
2) Подсчитать количество символов в первом слове F2.
8.
1) Скопировать из файла F1 в файл F2 все строки, которые не содержат цифры.
2) Подсчитать количество строк, которые начинаются на букву «А» в файле F2.
1) Скопировать из файла F1 в файл F2 все строки, которые содержат только одно слово.
2) Найти самое длинное слово в файле F2.
10.
1) Скопировать из файла F1 в файл F2 все строки, которые не содержат слова, начинающиеся на одну букву.
2) Найти самое короткое слово в файле F2.
11.
1) Скопировать из файла F1 в файл F2 все строки, кроме той строки, которая содержит самое короткое слово.
2) Напечатать номер этой строки.
12.
1) Скопировать из файла F1 в файл F2 все строки, кроме той строки, в которой больше всего гласных букв.
2) Напечатать номер этой строки.
13.
1) Скопировать из файла F1 в файл F2 все строки, начинающиеся на букву «А» и расположенные между строками с номерами N1 и N2.
2) Определить номер той строки, в которой больше всего согласных букв, файла F2.
14.
1) Скопировать из файла F1 в файл F2 все строки, не содержащие букву «А» и расположенные между строками с номерами N1 и N2.
2) Определить номер той строки, в которой больше всего гласных букв, файла F2.
15.
1) Скопировать из файла F1 в файл F2 все строки, заканчивающиеся на букву «А» и расположенные между строками с номерами N1 и N2.
2) Определить номер той строки, в которой больше всего букв «А», файла F2.
16.
1) Скопировать из файла F1 в файл F2 все строки, начинающиеся на букву «А» и Заканчивающиеся на букву «С», расположенные между строками с номерами N1 и N2.
2) Определить количество слов в первой строке файла F2.
17.
1) Скопировать из файла F1 в файл F2 все строки, начинающиеся на букву «А» расположенные между строками с номерами N1 и N2, а затем все строки от N2+3 и до последней.
2) Определить количество слов в последней строке файла F2.
18.
1) Скопировать из файла F1 в файл F2 все строки, в которых нет одинаковых слов.
2) Определить количество гласных букв в первой строке файла F2.
19.
1) Скопировать из файла F1 в файл F2 все строки, в которых нет слов, совпадающих с первым словом.
2) Определить количество согласных букв в первой строке файла F2.
20.
1) Скопировать из файла F1 в файл F2 все строки, в которых есть одинаковые слова.
2) Определить количество гласных букв в последней строке файла F2.
21.
1) Скопировать из файла F1 в файл F2 все строки, в которых есть слова, совпадающие с первым словом.
2) Определить количество согласных букв в последней строке файла F2.
22.
1) Скопировать из файла F1 в файл F2 все строки, в которых более 2 слов.
2) Определить номер слова, в котором больше всего гласных букв.
23.
1) Скопировать из файла F1 в файл F2 все строки, в которых содержится только одно слово.
2) Определить номер слова, в котором больше всего согласных букв.
24.
1) Скопировать из файла F1 в файл F2 все строки, в которых содержится два одинаковых слова.
2) Определить номер слова, в котором больше всего букв «А».
25.
1) Скопировать из файла F1 в файл F2 все строки, в которых содержится не менее двух одинаковых слов.
2) Определить номер слова, в котором больше всего цифр.
Лабораторная работа №4
“Функции и массивы”
Цель:Организовать обработку массивов с использованием функций, научиться передавать массивы как параметры функций.