
- •Федеральное агентство по образованию
- •Краткая история языка с
- •Особенности и основные понятия языка Си
- •Структура программы
- •Типы данных
- •Классификация типов данных
- •Вещественные
- •Логический
- •Диапазоны представления данных
- •Объявление переменных
- •Константы в языке Си
- •Операции языка Си. Приоритет операций
- •Операция присваивания
- •Арифметические операции
- •Операции отношения
- •Логические операции
- •Поразрядные операции
- •Операцияsizeof
- •Операция выбора по условию
- •Операция запятая
- •Приведение типов Неявное преобразование типов
- •Явное преобразование типов
- •Основные средства ввода-вывода на Си Понятие потока
- •Стандартные потоки
- •Функции потокового ввода-вывода
- •Функции ввода
- •Ввод символов
- •Ввод строк
- •Форматированный ввод
- •Операторы языка Си
- •Оператор if
- •Оператор switch
- •Оператор while
- •Оператор do while
- •Оператор for
- •Оператор break
- •Оператор continue
- •Функции вывода на экран
- •Вывод символов
- •Функция вывода строк puts()
- •Форматированный вывод
- •Указатели в языке Си
- •Адресная арифметика
- •Массивы
- •Функции в языке с
- •Прототипы функций
- •Указатели типа void
- •Функции, возвращающие указатели
- •Встраиваемые функции
- •Рекурсивные функции
- •Функции с переменным числом аргументов
- •Аргументы функции main()
- •Область действия и область видимости
- •Локальные переменные
- •Локальные переменные в функции Main()
- •Глобальные переменные
- •Классы памяти
- •Указатели на указатели
- •Указатели и многомерные массивы
- •Массивы указателей
- •Указатели на функции
- •Операции над строками символов Определение длины строки
- •Копирование строк
- •Поиск в строках
- •Преобразования символов в строках
- •Другие функции для работы со строками
- •Преобразования строк в числа
- •Преобразования чисел в строки
- •Функции анализа символов
- •Распределение памяти
- •Манипулирование блоками памяти
- •Типы, определяемые пользователем
- •Перечислимый тип
- •Структуры
- •Сложные структуры
- •Битовые поля в структурах
- •Объединения
- •Работа с файлами Связь между потоками и файлами
- •Типы дисковых файлов
- •Открытие файла
- •Запись и чтение данных
- •Форматированный ввод-вывод Форматированный вывод
- •Int fprintf (file *fp, char *fmt, ...);
- •Форматированный ввод
- •Символьный ввод
- •Символьный вывод
- •Блочный ввод-вывод
- •Закрытие файла
- •Директивы препроцессора
- •Директива #include
- •Директива #define
- •Директивы условной компиляции
- •Директива #undef
- •Предопределенные макросы
- •69 Лекции по курсу «Языки программирования» Часть III
Форматированный ввод
Синтаксис:
include <stdio.h> scanf(строка_формата [, аргументы]); |
Аргументы функции scanf ()
Первый аргумент – строка формата, в которой с помощью специальных управляющих символов задаются правила интерпретации введенных данных.
Второй аргумент и последующие – адресами переменных, по которым следует поместить данные.
Единственное, что непременно должно быть в строке формата, — это хотя бы одна спецификация ввода. Каждая такая спецификация начинается с символа % и содержит обязательные и необязательные компоненты в определенном порядке.
Функция scanf() применяет спецификации ввода из строки формата к полям ввода. Поле ввода – последовательность непустых символов, которая считается законченной, как только встретился первый пустой символ (пробел, табуляция и т.п.) или как только исчерпана указанная ширина поля.
Спецификация ввода может содержать такие компоненты.
Обязательный компонент
кроме символа % еще спецификация типа. Она состоит из одного или нескольких символов, указывающей функции scanf(), как ей интерпретировать вводимые данные. Эти символы представлены в табл.1. В столбце Аргумент перечислены типы, к которым должны принадлежать соответствующие переменные. Например, спецификации d должна соответствовать переменная типа int * (указатель на значение типа int).
Необязательные компоненты:
флаг пропуска поля ввода (*), следующий непосредственно за %. Если он есть в спецификации, то указывает функции scanf () выполнить ввод соответствующего значения, но проигнорировать результат и не присваивать его никакой переменной.
ширина поля. Ширина поля выражается десятичным целым числом и обозначает количество символов в поле ввода. Если ширина поля не указана, ввод продолжается до первого пустого символа.
модификатор точности – символ h, l, или L. При его наличии меняется смысл спецификации типа, идущей следом.
Таблица 1 – Спецификации типов для функции scanf ()
Тип |
Аргумент |
Описание типа |
d |
int * |
Десятичное целое число |
i |
int * |
Десятичное, восьмеричное (с 0 впереди), шестнадцатеричное (с 0Х или 0х впереди) целое число |
o |
int * |
Восьмеричное целое число с или без 0 впереди |
u |
unsigned int * |
Десятичное целое число без знака |
x |
int * |
Шестнадцатеричное целое число с или без 0Х (0х) впереди |
c |
char * |
Один или несколько введенных символов помещаются по адресу, указанному в аргументе. Завершающий \0 не добавляется. Если не задана ширина поля, вводится один символ. Если задана, то вводится указанное количество символов, включая пустые символы |
s |
char * |
Вводится строка непустых символов и помещается в указанную переменную с добавлением завершающего \0 |
a, e, f, g |
float * |
Вещественное число с плавающей точкой. Можно вводить в дробно-десятичной или экспоненциальной форме |
[…] |
char * |
Строка. Вводятся только символы, перечисленные в скобках. Ввод заканчивается, как только встретился символ не из списка, исчерпалась ширина поля или была нажата клавиша <Enter>. Для ввода символа ] поставьте его первым: []...]. В конец строки добавляется \0 |
[^…] |
char * |
То же, что [...], но вводятся только символы, не перечисленные в скобках |
% |
Нет |
Считывается символ % без его присваивания какой-либо переменной |
Таблица 2 – Модификаторы точности
Модификатор |
Назначение |
hh |
Находясь перед спецификациями d, i, о, u, х, X или n, показывает, что аргумент является указателем типа signed char или unsigned char |
h |
Находясь перед спецификациями d, i, о, u, х, X или n, показывает, что аргумент является указателем типа short int или unsigned short int |
l |
Находясь перед спецификациями d, i, о, u, х, X или n, показывает, что аргумент является указателем типа long или unsigned long. Перед спецификациями а, А, е, Е, f, F, g или G показывает, что аргумент имеет тип double |
ll |
Находясь перед спецификациями d, i, о, u, х, X или n, показывает, что аргумент является указателем типа long long или unsigned long long |
L |
Находясь перед спецификациями а, А, е, Е, f, F, g или G, показывает, что аргумент имеет тип long double |