Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основная книга по С++й.doc
Скачиваний:
16
Добавлен:
28.10.2018
Размер:
2.07 Mб
Скачать

If (!flag) printf("Отрицательных чисел нет"); Форматированный ввод данных

Функция scanf() (прототип содержится в файле stdio.h) обеспечивает форматированный ввод. Ее можно записать в следующем формальном виде:

scanf ("<управляющая строка>", аргумент_1, аргумент_2,...);

Аргументы scanf() должны быть указателями на соответствующие значения. Для этого перед именем переменной записывается символ &. Назначение указателей будет рассмотрено далее.

Управляющая строка содержит спецификации преобразования и используется для установления количества и типов аргументов. В нее могут включаться:

  • пробелы, символы табуляции и перехода на новую строку (все они игнорируются);

  • спецификации преобразования, состоящие из знака %, возможно, символа * (запрещение присваивания), возможно, числа, задающего максимальный размер поля, и самого символа преобразования;

  • обычные символы, кроме % (считается, что они должны совпадать с очередными неизвестными символами во входном потоке).

Рассмотрим символы преобразования функции scanf() (указываются после символа %):

Таблица 9.

Символы преобразования функции scanf()

Символы преобразования

Описание

c

на входе ожидается появление одиночного символа;

d или i

на входе ожидается десятичное целое число, и аргумент является указателем на переменную типа int;

D или l

на входе ожидается десятичное целое число, и аргумент является указателем на переменную типа long;

е или Е

на входе ожидается вещественное число с плавающей точкой;

f

на входе ожидается вещественное число с плавающей точкой;

g или G

на входе ожидается вещественное число с плавающей точкой;

о

на входе ожидается восьмеричное целое число, и аргумент является указателем на переменную типа int;

О

на входе ожидается восьмеричное целое число и аргумент является указателем на переменную типа long;

s

на входе ожидается появление строки символов;

x

на входе ожидается шестнадцатеричное целое число и аргумент является указателем на переменную типа int;

Х

на входе ожидается шестнадцатеричное целое число и аргумент является указателем на переменную типа long;

p

на входе ожидается появление указателя в виде шестнадцатеричного числа;

n

применяется в операциях форматирования. Аргумент, соответствующий этому символу спецификации, должен быть указателем на целое. В него возвращается номер позиции (после ввода), в которой записана спецификация %n;

u

на входе ожидается беззнаковое целое число, и аргумент является указателем на переменную типа unsigned int;

U

на входе ожидается беззнаковое целое число и аргумент является указателем на переменную типа unsigned long;

[ ]

сканирует входную строку для получения символов.

Перед некоторыми символами преобразования могут записываться следующие модификаторы:

Таблица 10.

Модификаторы функции scanf()

F

изменяет указатель, заданный по умолчанию, на указатель типа far;

N

изменяет указатель, заданный по умолчанию, на указатель типа near;

h

преобразует аргумент к типу short int (может записываться перед символами d, i, о, u, х);

l

преобразует аргумент к типу long int (может записываться перед символами d, i, o, u, x);

L

преобразует аргумент к типу long double (может записываться перед символами е, f, g).

Пример 21. Необходимо вести с клавиатуры целое число, символ и вещественное число.

int a;

char b;

float t;

scanf("%d", &a);

scanf("%c", &b);

scanf("%d%c%f",&a, &b, &t);

Пользователь осуществил ввод с клавиатуры в следующем виде:

431 <Enter>

W <Enter>

3.14 <Enter>

В этом случае, переменные получили следующие значения:

a → 431

b → ‘W‘

t → 3.14