- •Основы алгоритмизации и программирования, язык Си
- •Введение
- •Блок-схема алгоритма Общие требования к блок-схеме алгоритма
- •Линейные и разветвляющиеся процессы
- •Циклические процессы
- •Итерационные процессы
- •Комментарии
- •Типы данных
- •Данные целого типа
- •Данные вещественного типа
- •Модификатор const
- •Переменные перечисляемого типа
- •Константы
- •Описание переменных
- •Локальные переменные
- •Операции и выражения
- •Операция присваивания
- •Арифметические операции
- •Операции поразрядной арифметики
- •Логические операции
- •Операции отношения
- •Инкрементные и декрементные операции
- •Операция sizeof
- •Порядок выполнения операций
- •Приоритет операций
- •Преобразование типов
- •Операция приведения
- •Операция запятая
- •Ввод и вывод информации
- •Директивы препроцессора Директива #include
- •Директива #define
- •Понятие пустого и составного операторов
- •Условные операторы
- •Операторы организации цикла
- •Оператор цикла for
- •Оператор цикла while
- •Оператор цикла do … while
- •Вложенные циклы
- •Операторы перехода (break, continue, return, goto)
- •Примеры программ
- •Массивы Одномерные массивы
- •Примеры программ
- •Многомерные массивы (матрицы)
- •Примеры программ
- •Указатели Понятие указателя
- •Описание указателей
- •Операции с указателями
- •Связь между указателями и массивами
- •Массивы указателей
- •Многоуровневые указатели
- •Примеры программ
- •Символьные строки
- •Ввод/вывод строк.
- •Функции работы со строками.
- •Примеры программ
- •Функции
- •Прототип функции.
- •Определение функции.
- •Параметры функции
- •Параметры по умолчанию
- •Передача массива в функцию
- •Inline функции
- •Класс памяти
- •Автоматические переменные
- •Статические переменные
- •Регистровые переменные
- •Блочная структура
- •Примеры программ
- •Указатели на функции
- •Примеры программ
- •Рекурсия
- •Примеры программ
- •Аргументы в командной строке
- •Функции с переменным числом параметров
- •Примеры программ
- •Сортировка
- •Пузырьковая сортировка.
- •Шейкер сортировка
- •Сортировка вставкой
- •Сортировка выбором
- •Метод Шелла
- •Метод Хора
- •Структуры
- •Доступ к элементам структуры
- •Инициализация структур
- •Указатели на структуры.
- •Структуры и функции
- •Примеры программ
- •Поля бит
- •Объединения
- •Переменные с изменяемой структурой
- •Примеры программ
- •Организация списков и их обработка
- •Операции со списками при связном хранении
- •Построение обратной польской записи
- •Односвязный линейный список, очередь
- •Двусвязный линейный список
- •Циклический список, кольцо
- •Двусвязный циклический список
- •Примеры программ
- •Деревья
- •Потоки и файлы
- •Файлы Основные сведения о файловой системе
- •Организация посимвольного ввода и вывода
- •Определение конца файла feof()
- •Организация ввода и вывода строк
- •Удаление файлов
- •Дозапись потока
- •Позиционирование в файле
- •Текстовые и двоичные файлы
- •Функции fread() и fwrite()
- •Примеры программ
- •Хеширование
- •Схемы хеширования
- •Метод открытой адресации с линейным опробыванием
- •Метод цепочек
- •Машинное представление графов
- •Примеры программ
- •Литература
Удаление файлов
Функция remove() удаляет указанный файл. Прототип функции:
int remove(const char *file_name).
В случае успешного выполнения эта функция возвращает нуль, иначе — ненулевое значение.
В фрагменте программы демонстрируется удаление файла, имя которого вводится с клавиатуры
char str[80];
printf("\n Введите имя файла для удаления ");
gets(str);
if(*str)
if(remove(str))
{ printf("\nНельзя удалить файл.\n");
exit(1);
}
Дозапись потока
Для дозаписи содержимого выводного потока в файл применяется функция fflush():
int fflush(FILE *stream).
Все данные, находящиеся в буфере записываются в файл, который указан с помощью f. При вызове функции fflush() с пустым (null) указателем файла f будет выполнена дозапись во все файлы, открытые для вывода.
При успешном выполнения fflush() возвращает нуль, иначе — EOF.
Позиционирование в файле
Каждый открытый файл имеет, так называемый указатель на текущую позицию в файле. Все операции над файлами (чтение и запись) выполняются с данными с этой позиции. При каждом выполнении функции чтения или записи, указатель смещается на количество прочитанных или записанных байт, то есть устанавливается сразу за прочитанным или записанным блоком данных в файле. Это так называемый последовательный доступ к данным. Последовательный доступ удобен, когда необходимо последовательно работать с данными в файле. Но иногда необходимо читать или писать данные в произвольном порядке. Это достигается путем установки указателя на некоторую заданную позицию в файле функцией fseek().
int fseek(FILE *stream, long offset, int whence).
Параметр offset задает количество байт, на которое необходимо сместить указатель в направлении, указанном whence. Приводим значения, которые может принимать параметр whence:
SEEK_SET |
0 |
Смещение выполняется от начала файла |
SEEK_CUR |
1 |
Смещение выполняется от текущей позиции указателя |
SEEK_END |
2 |
Смещение выполняется от конца файла |
Величина смещения может быть как положительной, так и отрицательной, но нельзя сместиться за пределы начала файла.
Наряду с функцией fseek(), для перемещения указателя текущей позиции в файле на начало может быть использована функция rewind(). Кроме того эта функция выполняет сброс состояния ошибки в потоке, если она возникла при работе с файлом. Прототип функции:
void rewind(FILE *f).
Текстовые и двоичные файлы
Различают два вида файлов: текстовые и бинарные.
Текстовый файл — это последовательность ASCII-кодов символов. В стандарте С считается, что текстовый файл организован в виде строк В текстовом файле могут выполняться определенные преобразования символов. Например, символ новой строки может быть заменен парой символов — возврата каретки и перевода строки 13, 10 (0xD, 0xA).. Поэтому может и не быть однозначного соответствия между символами, которые пишутся (читаются), и теми, которые хранятся в файле. Текстовые файлы могут быть просмотрены и отредактированы текстовым редактором
Двоичный файл — это последовательность байт, причем никакого преобразования символов не происходит. Бинарные файлы – файлы, не имеющие структуры текстовых файлов. Каждая программа для своих бинарных фалов определяет собственную структуру. Кроме того, количество тех байтов, которые пишутся (читаются), и тех, которые хранятся на внешнем устройстве, одинаково.
Библиотечный файл stdio.h содержит функции для работы, как с текстовыми, так и с бинарными фалами. Примеры их использования рассмотрены в приведенных ниже примерах.