Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
сборник лабораторных работ.doc
Скачиваний:
6
Добавлен:
17.11.2019
Размер:
5.38 Mб
Скачать

20Краткая теоретическая справка

В конспекте лекций подробно рассмотрены вопросы потокового вода-вывода файлов.

Последовательность работы с файловым потоком следующая:

#include <stdio.h>

void main(){

FILE *fp; //описываем указатель на поток

//открываем поток и сразу выполняем проверку:

if((fp=fopen("t.txt", "w")==NULL){

perror("ошибка при открытии файла \n");

exit(0);

}

… //выполняем операции обмена данными с потоком

fclose(fp); //закрываем поток

}

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

  • стандартный поток ввода (stdin – указатель на поток, связанный с устройством стандартного ввода – клавиатура),

  • стандартный поток вывода (stdout – указатель на поток, связанный со стандартным устройством вывода – экран дисплея),

  • стандартный поток вывода ошибок (stderr – указатель на поток, связанный со стандартным устройством вывода сообщений об ошибках – экран дисплея).

Для ввода-вывода данных с помощью стандартных потоков (stdin/stdout) в библиотеке языка C определены следующие функции:

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

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

  • scanf()/printf() – ввод-вывод в режиме форматирования данных.

Аналогичным образом можно осуществлять работу с файлами на диске. Для этой цели в библиотеку языка C включены следующие функции:

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

  • fgets()/fputs() – ввод-вывод строки;

  • fscanf()/fprintf() – ввод-вывод в режиме форматирования данных;

  • fread()/fwrite() – ввод-вывод блока данных (заданного количества байт).

Для проверки достижения признака конца файла можно использовать функцию

int feof(FILE *fn), возвращающую значение "истина", если конец файла достигнут.

Пример:

FILE *fp;

while(!feof(fp)) //пока не достигнут конец файла

//делать что-нибудь с файлом

21Индивидуальные задания

Задача 1. Для данных задачи 2 лабораторной работы 9 (Работа со структурами) описать функции для ввода-вывода значений массива структур из файла произвольного доступа. Создайте файл SortAllStr.out, в который запишите все результаты выполнения сортировки массива по различным полям.

Задача 2. Изменить решение задачи 2 лабораторной работы 8 (Работа со строками) таким образом, чтобы исходные данные находились в файле Str.in (текст может занимать несколько строк), а выходные записывались в файл Str.out.

Задача 2. Изменить решение задачи 3 лабораторной работы 6 (Работа со двумерными массивами) таким образом, чтобы исходные данные находились в файле Matr.in (первая строка содержит размерность (размерности) матрицы, остальные строки файла содержат значения элементов строк матрицы, записанные через пробел), а выходные записывались в файл Matr.out.

Тема: Многофайловая разработка программ

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

22Индивидуальные задания

Задача 1. Описать аналоги библиотечных функций для работы со строками strlen(), strcat(), strcpy(), strcmp(). Протестировать функции в главной функции на примерах, введенных пользователем. Реализовать задачу с помощью многофайлового проекта: main.cpp – функция main(), mystring.cpp – реализация функций, mystring.h – прототипы функций.

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

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

<60>