- •Оглавление
- •1.2. Свойства языков программирования
- •1.3. Основные парадигмы программирования Процедурное программирование
- •Модульное программирование
- •Абстракция данных
- •Объектно-ориентированное программирование
- •Непечатные символы
- •Тема 2 Типы данных
- •2.1. Понятие переменной и объявление переменных
- •Объявление переменных
- •Встроенные типы данных
- •Размер памяти, выделяемой под встроенные типы данных
- •2.2. Константы и перечисления Константные переменные
- •Перечисления
- •2.3. Операции и выражения
- •Мультипликативные операции
- •Операции сравнения
- •Побитовые логические операции
- •Побитовые операции
- •Комментарии
- •Оператор while(пока)
- •Оператор do/while(выполнять/пока)
- •Оператор for(цикл)
- •Оператор множественного выбора switch
- •Операторы breakиcontinue
- •Тема 4 Массивы
- •4.1.Определение, объявление и инициализация массивов
- •Объявления и инициализация массивов в программе
- •4.2. Сортировка массивов Пузырьковая сортировка
- •Сортировка вставками
- •4.3. Поиск в массивах Линейный поиск
- •Двоичный поиск
- •4.4. Многомерные массивы
- •Тема 5 Указатели Объявления и инициализация переменных указателей
- •5.1. Операции над указателями
- •5.2. Выражения и арифметические действия с указателями
- •5.3. Взаимосвязи между указателями и массивами
- •5.4. Массивы указателей
- •5.5. Динамическое выделение памяти под массивы
- •Тема 6 Функции
- •6.2. Определения функций
- •Генерация случайных чисел
- •6.3. Классы памяти и область действия Классы памяти
- •Область действия
- •6.4. Рекурсия
- •6.5. Ссылки и ссылочные параметры
- •Вызов функций по ссылке с аргументами указателями
- •6.6. Использование спецификатораconstс указателями
- •6.7. Перегрузка функций
- •Аргументы по умолчанию
- •6.8. Передача массивов в функции
- •6.9. Указатель на функцию
- •6.10. Командная строка аргументов
- •6.11 Неопределенное количество аргументов
- •Тема 7 Введение в обработку строк
- •7.1. Работа со строками в с
- •Понятие символов и строк в с
- •Функции для работы со строками
- •Определение длины строки
- •Сложение двух строк (конкатенация)
- •Добавление к исходной строке указанного количества символов.
- •Копирование строки в другую строку
- •Сравнение строк
- •Получение строки от пользователя
- •Тема 8 Работа с файлами
- •Открытие файла
- •Чтение из файла символа или строки символов
- •Запись символа или строки символов в файл
- •Смещение внутри файла
- •Значения параметра fromwhereфункцииfseek
- •Закрытие файла
- •Тема 9 Компоновка программ и препроцессор
- •9.1. Компоновка программ
- •Проблема использования общих функций и имен
- •Использование включаемых файлов
- •9.2. Препроцессор
- •Определение макросов
- •Условная компиляция
- •Дополнительные директивы препроцессора
- •Тема 10 Структуры
- •10.1. Определение структур и доступ к элементам
- •Доступ к элементам структур
- •Использование структур
- •10.2. Битовые поля
- •10.3. Объединения
- •10.4. Построение связных списков на основе структур с самоадресацией
- •Создание простого связного списка
- •Очереди
- •Деревья
- •Список рекомендуемой литературы
Чтение из файла символа или строки символов
На рис. 8.1. представлена программа, выводящая на экран содержимое текстового файла
#include <stdio.h>
#include <conio.h>
void main(void)
{
FILE *stream;
char ch;
// открыть файл для его чтения
stream = fopen("proba.txt","r");
if(!stream)
return;//если файл не удалось открыть, завершаем программу
do
{
// прочитать символ из файла
ch = fgetc(stream);
// вывести символ на экран
putch(ch);
}
while(ch!=EOF);
fclose(stream);
}
Рис. 8.1. Программа выводит на экран содержимое текстового файла посимвольно
#include <stdio.h>
void main()
{
FILE *stream;
char msg[20];
// открыть файл для чтения
stream = fopen("test.txt","r");
// получить строку из файла
fgets(msg,strlen(string)+1,stream);
// напечатать строку */
printf("%s",msg);
fclose(stream);
}
Рис. 8.2. Программа выводит на экран содержимое текстового файла построчно
fgetsсчитывает из потокаstreamстроку символов и помещает ее вs. Ввод завершается после вводаn-1символа или при вводе символа перехода на следующую строку, смотря что произойдет раньше. В отличие отgets,fgetsпрекращает ввод строки при получении символа перехода на следующую строку. Нулевой байт добавляется в конец строки для определения ее конца (см. рис. 8.2).
Запись символа или строки символов в файл
Для записи символа в файл необходимо указать сам символ, а также указатель на открытый для записи файл (рис. 8.3.).
void main()
{
FILE *stream;
stream = fopen("test.txt","w+");
char msg[] = "Здравствуй мир";
int i=0;
while(msg[i])
{
fputc(msg[i],stream); //запись в файл stream
i++;
}
fclose(stream);
}
Рис. 8.3. Программа записывает построчно в файл
Функция fputsкопирует строку, ограниченную нулевым байтом в потокstream. Она не добавляет в конец строки символ перехода на новую строку и не выводит нулевой символ.
void main()
{
FILE *stream;
stream = fopen("test.txt","w+");
char msg[] = "Здравствуй мир";
fputs(msg,stream); //запись в файл stream
fclose(stream);
}
Рис. 8.4. Программа записывает строку в файл
Смещение внутри файла
int fseek(FILE * stream, long offset, int fromwhere);
Функция fseekустанавливает адресный указатель файла, соответствующий потокуstream, в новую позицию, которая расположена по смещениюoffsetотносительно места в файле, определяемого параметромfromwhere. Параметрfromwhereможет иметь одно из трех значений 0, 1 или 2, которые представлены тремя символическими константами (определенными в файлеstdio.h), следующим образом:
Таблица 5
Значения параметра fromwhereфункцииfseek
Параметр |
Размещение в файле frowmwhere |
SEEK_SET (0) |
начало файла |
SEEK_CUR (1) |
позиция текущего указателя файла |
SEEK_END (2) |
конец файла (EOF) |
Функция fseekиспользуется с операциями ввода/вывода в поток (рис. 8.5.).
#include <stdio.h>
void main(void) {
FILE *stream;
char string[] = "Тестовый пример";
char msg[20];
/* создать файл для его изменения */
stream = fopen("proba.txt","w+");
/* записать в файл данные */
fputs(string,stream);
/* перейти в начало файла */
fseek(stream,0,SEEK_SET);
/* ввести строку из файла */
fgets(msg,strlen(string)+1,stream);
/* напечатать строку */
printf("%s",msg);
fclose(stream);
}
Рис. 8.5. Программа, иллюстрирующая работу функции fseek