- •Функции.
- •Вызов функции с переменным числом параметров
- •Функция main и её параметры.
- •Директивы препроцессора (прекомпилера).
- •Объявление указателей.
- •Модификатор const.
- •Операции.
- •Указатели на различные типы.
- •Указатель на void.
- •Применение указателей для передачи данных между функциями.
- •Массивы.
- •Индексация массивов.
- •Хранение массива в памяти. Адреса элементов. Хранение массива в памяти.
- •Массивы и константные указатели.
- •Статическое и динамическое выделение памяти.
- •Функции calloc, malloc, free
- •Функция realloc
- •Передача массивов в качестве аргументов функции.
- •Указатели на функции.
- •Библиотеки функций.
- •Функции форматированного ввода-вывода.
- •Функция printf().
- •%[Флаги] [Ширина] [.Точность] [{h | l | I | i32 | i64}]тип
- •Для чего нужен форматированный вывод.
- •Функция scanf().
- •Функции sprintf() и sscanf().
- •Функции fprintf() и fscanf().
- •Функции неформатированного ввода-вывода.
- •Работа со строковыми данными (стрингами). Представление строковых данных в языке c.
- •Функции работы со строками.
- •Потоковый ввод-вывод
- •Функции форматированного ввода-вывода.
- •Функция printf().
- •%[Флаги] [Ширина] [.Точность] [{h | l | I | i32 | i64}]тип
- •Для чего нужен форматированный вывод.
- •Функция scanf().
- •Функции sprintf() и sscanf().
- •Функции fprintf() и fscanf().
- •Функции неформатированного ввода-вывода.
- •Функции работы с файлами.
- •Потоковый ввод-вывод
- •Работа с потоками
- •Курсор.
- •Ввод-вывод отдельных символов и строк.
- •Форматированный ввод-вывод информации в файл.
- •Блочный потоковый ввод-вывод
- •Смена текущей позиции в файле. Проверка конца файла.
- •Функции доступа к файлам нижнего уровня.
- •Методы сортировки данных.
- •Введение
- •Сравнение методов сортировки
- •Программная реализация алгоритмов сортировки
- •Метод пузырька.
- •Метод обмена.
- •Метод вставки.
- •Метод Шелла.
- •Метод кучи (бинарной кучи).
- •Очередь
- •Линейный список
- •Физическое (машинное) представление линейных списков
- •Программные реализации структур данных. Стек. Реализация в виде массива.
- •Стек. Связанное представление.
- •Очереди. Реализация в виде массива.
- •Дерево. Связанное представление.
- •Рекурсивный вызов функций.
- •Структуры. Объединения. Перечисления.
- •Перечисление (enum).
- •Производные типы данных.
- •Структура (struct).
- •Побитовое описание полей структуры.
- •Объявление переменных, реализующих структуру.
- •Доступ к элементам структуры.
- •Объединение (union).
- •Вложенное описание структур и объединений.
- •Описание структур и объединений в виде пользовательского типа.
- •Передача структур и объединений в виде параметров функции.
- •Инициализация структур и объединений.
- •Выгода от использования структур
Потоковый ввод-вывод
Строго говоря, к функциям потокового ввода-вывода относятся как функции работы с файлами, рассматриваемые в этом разделе, так и функции вывода на монитор и считывания данных с клавиатуры, рассмотренные в предыдущем разделе.
На уровне потокового ввода-вывода обмен данными производится побайтно. Такой ввод-вывод возможен как для собственно устройств побайтового обмена (печатающее устройство, дисплей), так и для файлов на диске. Хотя устройства внешней памяти, строго говоря, являются устройствами поблочного обмена, т.е. за одно обращение к устройству производится считывание или запись фиксированной порции данных, операционная система и драйвер устройства имитируют побайтовый обмен.
При вводе с диска (при чтении из файла) данные помещаются в буфер операционной системы блоками, а затем побайтно или определенными порциями передаются программе пользователя. При выводе данных в файл они накапливаются в буфере, а при заполнении буфера записываются в виде единого блока на диск за одно обращение к последнему.
Функции библиотеки ввода-вывода языка C, поддерживающие обмен данными с файлами на уровне потока, позволяют обрабатывать данные различных размеров и форматов, обеспечивая при этом буферизованный ввод и вывод. Таким образом, поток - это файл вместе с предоставляемыми средствами буферизации.
При работе с потоком можно производить следующие действия:
открывать и закрывать потоки (связывать указатели на потоки с конкретными файлами);
вводить и выводить: символ, строку, форматированные данные, порцию данных произвольной длины;
анализировать ошибки потокового ввода-вывода и условие достижения конца потока (конца файла);
управлять буферизацией потока и размером буфера;
получать и устанавливать указатель (индикатор) текущей позиции в потоке.
Для того чтобы можно было использовать функции библиотеки ввода-вывода языка Си, в программу необходимо включить заголовочный файл stdio.h (#include <stdio.h>), который содержит прототипы функций ввода-вывода, а также определения констант, типов и структур, необходимых для работы функций обмена с потоком.
Функции форматированного ввода-вывода.
Функции форматированного ввода-вывода объявлены в хэдере stdio.h.
Функция printf().
Функция printf осуществляет форматированный вывод информации на консоль (экран).
Синтаксис:
int printf (const char* FormatString, [arg1, arg2,]…);
arg1, arg2, и т.д. - это список аргументов, значения которых необходимо напечатать.
FormatString – форматирующая строка. Это строка символов, задающая формат печати аргументов.
Например:
printf("значение числа пи равно %f\n",pi);
Список аргументов содержит только один элемент pi.
printf("значение числа пи равно %f\n, число е=%f",pi,e);
Список аргументов содержит 2 параметра - pi и e.
Форматирующая строка содержит информацию двух различных видов:
Символы, печатаемые напрямую. В их число также входят спецсимволы (\n – перевод строки, \t – табуляция)
Спецификаторы форматирования, начинающиеся с знака % (%f)
Поскольку знак % зарезервирован для описания форматов, то для того, чтобы напечатать просто символ % необходимо пользоваться сочетанием %%.
Каждому аргументу из списка, следующего за форматирующей строкой, должен соответствовать один спецификатор форматирования.
Спецификатор форматирования имеет следующий синтаксис: