Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование / WORD / Лекции по ЯП (часть 3).doc
Скачиваний:
138
Добавлен:
15.04.2015
Размер:
1.34 Mб
Скачать

Форматированный ввод

Синтаксис:

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