Оператор вызова функции scanf () имеет следующую структуру:
scanf(форматная_строка, список_аргументов);
Данная функция осуществляет чтение символов, вводимых с клавиатуры, и преобразование их во внутреннее представление в соответствии с типом величин. В функции scanf () форматная строка и список аргументов присутствуют обязательно. Например оператор:
scanf ("%f",&a);
Здесь "%f" – форматная строка; &a – список аргументов, состоящий из одного элемента. Этот оператор производит ввод числового значения в переменную а.
Символьную последовательность, вводимую с клавиатуры и воспринимаемую функцией scanf (), принято называть входным потоком. Функция scanf () разделяет этот поток на отдельные вводимые величины, интерпретирует их в соответствии с указанным типом и форматом и присваивает переменным, содержащимся в списке аргументов.
Список аргументов – это перечень вводимых переменных, причем перед именем каждой переменной ставится значок &. Это знак операции «взятие адреса переменной».
Форматная строка заключается в кавычки (как и для printf ) и состоит из списка спецификаций. Каждая спецификация имеет следующую структуру:
%[*] [ширина поля ввода ] [модификатор] спецификатор
Из них обязательным элементом является % и спецификатор. Для ввода числовых данных используются следующие спецификаторы:
d – для целых десятичных чисел (тип int);
u – для целых десятичных чисел без знака (тип unsigned int);
f – для вещественных чисел (тип float) в форме с фиксированной точкой;
е – для вещественных чисел (тип float) в форме с плавающей точкой.
Звездочка в спецификации позволяет пропустить во входном потоке определенное количество символов. Ширина поля – целое положительное число, позволяющее определить число символов из входного потока, принадлежащих значению соответствующей вводимой переменной. Как и в спецификациях вывода для функции printf (), в спецификациях ввода функции scanf () допустимо использование модификаторов h, l, L. Они применяются при вводе значений модифицированных типов:
hd – для ввода значений типа short int;
ld – для ввода значений типа long int;
lf, le – для ввода значений типа double в форме с фиксированной и плавающей точкой;
Lf, Le – для ввода значений типа long double в форме с фиксированной и плавающей точкой.
Все три величины а, b, с можно ввести одним оператором:
scanf("%f%f%f",&a,&b,&c);
Если последовательность ввода будет такой
5 3.2 2.4 <Enter>
то переменные получат следующие значения: а=5,0, b=3,2, с=2,4. Разделителем в потоке ввода между различными значениями может быть любое количество пробелов, а также другие пробельные символы: знак табуляции, конец строки. Только после нажатия на клавишу Enter вводимые значения присвоятся соответствующим переменным. До этого входной поток помещается в буфер клавиатуры и может редактироваться.