Открытие и закрытие потока

Прежде чем начать работать с потоком, его надо инициировать, т. е. открыть. При этом поток связывается со структурой предопределенного типа 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
“Функции и массивы”

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