- •Общие методические указания по выполнению лабораторных работ
- •Работа со структурами данных (struct)
- •Описание структур и структурных переменных
- •Вложенные структуры
- •Обращение к полям структуры
- •Например, для переменных, описанных шаблоном
- •Массивы структурных переменных
- •Объявление типов в языке Си
- •Введите оценки ( 2 целых числа от 3 до 5 ): 5 5
- •Использование структур в функциях
- •Использование глобальных данных
- •Обработка вложенных структур
- •Толстой л.Н. Война и мир 1995 6 Структуры и поразрядные операции
- •Поразрядные операции
- •Сдвиговые поразрядные операции
- •Операнд сдвиг число_битов
- •Структуры с битовыми полями
- •Работа с объединениями (union)
- •Работа с перечислениями (enum)
- •Работа с файлами Понятие файла и потока ввода-вывода данных в компьютере
- •Открытие и закрытие файла
- •Потоки стандартного ввода-вывода
- •Повторное открытие файла
- •Позиционирование указателя записи-чтения
- •Int fseek (указатель_потока, (long) смещение, начало_отсчета),
- •Начало_отсчета может принимать следующие значения:
- •Функции файлового ввода-вывода
- •Посимвольный ввод-вывод
- •Вывод символов из файла:
- •Построчный ввод-вывод Пусть описан символьный массив
- •Форматированный ввод-вывод данных
- •Блоковый ввод-вывод
- •Работа с динамическими структурами данных Динамическое распределение памяти
- •Очередь
- •Рекурсивные функции
- •Деревья
Начало_отсчета может принимать следующие значения:
SEEK_SET (или 0) – сдвиг выполняется от начала файла;
SEEK_CUR (или 1) – сдвиг выполняется от текущей позиции маркера;
Seek_end (или 2) – сдвиг выполняется от конца файла;
Символьные константы начала_отсчета определены в заголовочном файле stdio.h. В случае успеха функция возвращает 0, иначе – EOF (–1).
Например, если из файла с указателем myfile прочитана строка из 20 символов, и мы хотим вернуться к началу этой строки, необходимо позиционировать маркер записи-чтения файла функцией
fseek (myfile, -20, SEEK_CUR).
Функции файлового ввода-вывода
Эти функции можно разделить на несколько типов в зависимости от структуры передаваемых данных:
Тип функции ввода-вывода |
Структура данных |
Посимвольный |
Поток символов |
Построчный |
Последовательность строк переменной длины |
Форматированный |
Форматированные поля с разделителями |
Блоковый |
Последовательность записей постоянной длины (блоков) |
Первые три типа файловых функций ввода-вывода работают аналогично стандартным функциям ввода-вывода, однако требуют задания указателя на обрабатываемый файл, например, описанного как
FILE *fp.
Посимвольный ввод-вывод
Стандартные функции ввода fgetchar () или getchar () возвращают прочитанный символ из файла stdin (буфер ввода), который можно записать в переменную целого типа:
int ch;
ch = getchar(); .
Поскольку значение признака конца файла EOF не должно совпадать с ASCII-кодами символов, его определяют равным –1, а переменную ch описывают как целую, а не символьную.
Файловые функции чтения fgetc (fp) или getc (fp) возвращают символ из открытого файла fp:
ch = fgetc (fp);.
Стандартные функции вывода fputchar (ch) или putchar (ch) выводят символ на экран (stdout):
putchar(ch); .
Функции записи в файл fputc (fp) или putc (fp) помещают символ в открытый файл fp:
fputc (ch, fp); .
Пример. Демонстрируются приемы открытия и закрытия файла, а также использование файлового и стандартного символьного ввода-вывода данных.
Программа.
#include<conio.h>
#include<stdio.h>
int main ()
{ int ch;
char *filename = "c:\\tc\\myfiles\\char.dat"; /* спецификация файла */
FILE *fp; /* указатель файла */
clrscr(); /* очистка экрана */
/* Открытие файла для записи: */
if (( fp = fopen(filename, "w")) == NULL)
{ рuts ("0шибка открытия файла.\n”
”Проверьте спецификацию файла.");
puts ("He забудьте про удвоение символа \\ .");
return 0; /* аварийный выход из программы */
}
printf ("Фaйл %s открыт для записи.\n”
”Введите несколько символов и нажмите Enter.", filename);
printf (" EOF:%d\n", EOF); /* вывод значения EOF */
while ((ch=getchar()) != '\n') /* цикл ввода символов */
fputc (ch, fp); /* запись символа в файл */
freopen (filename, "r", fp); /* переоткрытие файла для чтения */
рuts ("Вывод символов из файла");
while ((ch=getc(fp)) != EOF) /* цикл чтения символов из файла */
putchar (ch); /* вывод символа на экран */
fclose(fp); /* закрытие файла */
printf("\nНажмите лю6ую клавишу...");
getch(); /* задержка экрана результатов */
return 1; /* нормальное окончание программы */
}
Результаты программы:
Файл c:\tc\myfiles\char.dat открыт для записи.
Введите несколько символов и нажмите Enter. EOF= -1
Привет, программист!
