
- •Руденко т.В. Сборник задач и упражнений по языку Си. ( учебное пособие для студентов II курса )
- •Предисловие
- •Типы, операции, выражения
- •Управление
- •3.1 Синтаксис и семантика операторов языка Си
- •Обработка числовых данных
- •Обработка символьных данных
- •Функции и структура программы
- •Указатели и массивы
- •Структуры, объединения
- •6.1 Основные сведения
- •6.2 Структуры и функции. Указатели на структуры.
- •6.3 Структуры со сылками на себя
- •Ввод-вывод
- •7.1 Стандартный ввод-вывод
- •7.2 Работа с файлами
- •Интерфейс с системой unix
- •Низкоуровневый ввод-вывод
- •Процессы, сигналы
- •8.2.1 Конвейер, перенаправление ввода-вывода
- •8.2.2 Сигналы. Фоновые процессы.
- •Задания практикума
- •Свойства транслятора
- •Калькулятор
- •Моделирование работы интерпретатора shell
- •Приложения
- •Библиотека стандартных функций языка с
- •Функции работы со строками
- •Функции проверки класса литер
- •Ввод-вывод
- •Операции над файлами
- •Форматный вывод
- •Литеры-спецификаторы и их смысл при выводе
- •Форматный ввод
- •Литеры-спецификаторы и их смысл при вводе
- •Функции ввода-вывода литер
- •Функции позиционирования файла
- •Математические функции
- •Функции общего назначения
- •Дальние переходы
- •10.2 Фрагменты стандарта языка Си
- •10.2.1 Классификация типов
- •10.2.2 Приоритеты и порядок выполнения операций
- •10.2.3 Арифметические преобразования при выполнении арифметических операций вида X op y
- •10.2.4 Арифметические преобразования при выполнении присваивания и явного приведения
- •10.2.6 Явное приведение ( тип т ) X
- •10.2.7 Адресная арифметика
- •10.3 Системные функции unix
- •10.3.1 Базисные средства ввода-вывода
- •10.3.2 Дополнительные средства ввода-вывода
- •10.3.3 Процессы, транспортеры, сигналы
- •Литература
- •Содержание
Форматный ввод
Функции форматного ввода осуществляют ввод информации в соответствии с форматом.
int fscanf (FILE* stream, const char* format,...)
функция читает данные из потока stream под управлением формата format. Введенные данные присваиваются аргументам, следующим за аргументом format. Все эти аргументы должны быть указателями. Функция завершает работу, если исчерпался формат или возникла ошибка преобразования. Возвращает EOF, если исчерпан файл или возникла ошибка; в остальных случаях - количество введенных и преобразованных значений.
Строка формата обычно содержит спецификации преобразования, которые используются для управления вводом. Каждая спецификация преобразования начинается символом % и заканчивается литерой-спецификатором преобразования. Между % и литерой-спецификатором могут быть расположены символы управления вводом ( в том порядке, в каком они перечислены ниже):
символ *, который подавляет присваивание;
число, определяющее максимальную ширину поля ввода;
модификаторы h, l или L. Литерам-спецификаторам d, i, o, u, x может предшествовать литера h, если соответствующий аргумент является указателем на short (а не на int), или литера l, если аргумент - указатель на long. Литерам-спецификаторам e, f, g может предшествовать литера l, если аргумент - указатель на double (а не на float), или литера L, если аргумент - указатель на long double.
Кроме спецификаций преобразования, в строку-формат могут входить пробелы и табуляции, которые игнорируются, а также обычные литеры (но не %), которые ожидаются в потоке ввода среди литер, отличных от пробельных.
Под пробельными литерами понимаются литеры пробела, табуляции, новой-строки, возврата-каретки, вертикальной-табуляции и смены-страницы.
Спецификация преобразования определяет способ интерпретации очередного поля ввода. Поле ввода определяется как строка непробельных литер; при этом ввод строки прекращается, если встретилась пробельная литера либо исчерпана ширина поля ввода. Полученное значение присваивается переменной, на которую указывает соответствующий аргумент. Если присваивание подавляется при помощи *, то поле ввода пропускается, но никакого присваивания не происходит.
Литеры-спецификаторы и их смысл при вводе
------------------------------------------------------------------------------------------------------------
литера тип аргумента; вид печати
------------------------------------------------------------------------------------------------------------
d десятичное целое; int *.
i целое; int *. Целое может быть восьмеричным (с ведущим нулем) или шестнадцатиричным (с ведущими 0х или 0Х).
о восьмеричное целое (с ведущим 0 или без него); int *.
x шестнадцатиричное целое (с ведущими 0x или 0X или без них); int *.
u беззнаковое десятичное целое; unsigned int *.
c литеры; char *. Литеры ввода размещаются в указанном массиве в количестве, заданном шириной поля; по умолчанию это значение равно 1. Литера ‘\0’ не добавляется. Пробельные литеры здесь рас- сматриваются как обычные литеры и поступают в аргумент. Чтобы прочитать следующую непробельную литеру, используйте %1s.
s строка непробельных литер (записывается без кавычек); char*, ука- зывающий на массив размера, достаточного, чтобы вместить строку и добавляемую к ней литеру ‘\0’.
e,f,g число с плавающей точкой; float *. Число содержит необязательный знак, непустую последовательность цифр ( возможно, с десятичной точкой) и необязательную экспоненту, состоящую из E или e и цело- го (возможно, со знаком).
p значение указателя в виде, в котором его бы напечатала функция printf со спецификацией %p (представление зависит от реализации); void*.
% обычная литера %; присваивание не происходит.
int scanf ( const char* format,...)
семантика функции полностью эквивалентна fscanf (stdin, const char* format,...).
int sscanf (char *s, const char* format,...)
sscanf действует так же, как и scanf, только ввод литер осуществляет из строки s.