- •1. Цель работы
- •2. Базовые понятия языка
- •2.1. Алфавит языка Си
- •2.2. Константы
- •2.3. Идентификатор
- •2.4. Объявление переменных
- •2.5. Стандартные типы данных
- •2.6. Данные вещественных типов
- •2.7. Инициализация переменных
- •3. Операции языка си
- •3.1. Арифметические операции
- •3.2. Поразрядные операции
- •3.3. Операции отношения (сравнения)
- •3.4. Логические операции
- •3.5. Операции присваивания
- •3.6. Операция sizeof
- •3.7. Операция условие
- •3.8. Разделитель точка с запятой
- •3.9. Приоритеты операций и порядок вычислений
- •4. Операторы языка си
- •4.1. Составной оператор
- •4.2. Условный оператор
- •4.3. Оператор switch
- •4.4. Оператор break
- •4.5. Оператор for
- •4.6. Оператор while
- •4.7. Оператор do while
- •4.8. Оператор continue
- •4.9. Оператор goto
- •5. Указатели, массивы, строки
- •5.1. Указатели
- •5.2. Массивы
- •5.3. Строки
- •5.6. Двумерные массивы
- •5.7. Инициализация массивов
- •5.8. Связь указателей и массивов
- •6. Функции
- •6.1. Определение и вызов функций
- •6.2. Передача параметров функции main
- •7. Структуры и объединения
- •7.1. Структуры
- •7.2. Объединения (смеси)
- •7.3. Поля битов
- •8. Ввод-вывод
- •8.1. Консольный ввод-вывод
- •8.2. Потоковый файловый ввод-вывод
- •9. Вопросы для самостоятельного изучения
- •10. Порядок выполнения лабораторных работ и содержание отчета
- •11. Литература
8.2. Потоковый файловый ввод-вывод
Потоком называется абстрактный уровень между программистом и физическим устройством. Для обеспечения работы с потоковым вводом-выводом необходимо подключить библиотеку stdio.h.
Связующим звеном между файлом и потоком в Си является указатель на файл. Указатель на файл — это указатель на структуру типа FILE, которая определена в файле stdio.h.
Объявить указатель на файл можно следующим образом:
FILE *fil;
Рассмотрим работы основных функций файлового ввода-вывода библиотеки stdio.h.
1. FILE *fopen(char *filename, char *mode). Открывает поток и связывает файл с потоком. Возвращает указатель на файл. Если файл не отктыт, то возвращает нулевое значение (NULL). Параметр mode — это строка, содержащая режим открытия файла. Перечислим возможные режимы открытия файла.
"r" |
Открыть для чтения |
"w" |
Создать для записи |
"a" |
Открыть для добавления |
"r+" |
Открыть для чтения и записи |
"w+" |
Создать для чтения и записи |
"a+" |
Открыть для добавления или создать для чтения или записи |
2. int putc(int c, FILE *f). Записать символ в поток. При успешном окончании возвращает записанный символ. При возникновении ошибки возвращает признак конца файла EOF.
3. int getc(FILE *f). Считывает символ из потока. Возвращает EOF если конец файла или произошла ошибка при чтении из файла.
Пример.
char c;
FILE *fil;
if ((fil=fopen("text.txt","rt"))==0)
{printf("Файл не открыт\n");
exit(0);}
c=getc(fil);
while(c!=EOF) {
c=getc(fil);
//Обработка считанных данных
};
4. int feof(FILE *f). Возвращает "1" если достигнут конец файла.
Пример.
while (!feof(fil)) {c=getc(fil);}
5. char *fgets(char *s, int n, FILE *f). Ввод строки из n-1 символа. Ввод заканчивается если прочитано меньше n-1 символов или в момент ввода символа новой строки. В конце файла возвращает нулевое значение.
char c[100];
while (!feof(fil))
if (fgets(c,90,fil)!=0)
printf("%s",c);
6. int fputs(char *s, FILE *f). Вывод строки, ограниченной символом ‘\0’, в файл. При ошибках функция возвращает EOF.
7. int fprintf(FILE *f, форматная строка, список переменных). Работает аналогично функции printf, но вывод осуществляется в файл.
8. int fscanf(FILE *f, форматная строка, список переменных). Работает аналогично функции scanf, но ввод осуществляется из файла.
9. int fclose(FILE *f). Закрыть файл.
10. int fseek(FILE *f, long offset, long begin). Позиционирование в файле.
Параметр offset задает смещение по файлу в прямом (положительное) или в обратном (отрицательное) направлениях.
Параметр begin определяет начало отсчета. Возможные значения данного параметра определены константами, объявленными в файле stdio.h:
SEEK_SET (равна 0) — начало файла;
SEEK_CUR (равна 1) — текущая позиция;
SEEK_END (равна 2) — конец файла.
Примеры:
fseek(fil1, 250L, SEEK_CUR);
fseek(fil2, 0L, SEEK_SET);
Символ L после числа обозначает тип параметра long.
11. void rewind(FILE *). Установить указатель текущей позиции в потоке на начало потока.
