CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник по библиотечным функциям языка Си
scanf - форматный ввод
Описание
Это процедуры форматного ввода. Многоточия обозначают аргументы (от 0 и более), которые являются указателями на переменные для ввода информации; fscanf читает из входного потока fp. scanf читает из stdin. sscanf читает из указанного буфера buffer. Считывае- мые литеры преобразуются в соответствии с форматной строкой, и эти преобразованные зна- чения размещаются по аргументам-указателям. Аргументы должны быть указателями на то, куда будут записываться значения. Форматная строка состоит из: 1. Пробелов, литер табуляции и новой строки, ко- торые вызывают пропуск ввода до следующей, не 'белой' (whitespace) литеры. 2. Других литер, кроме литеры %, которые "один в один" переправляются во ввод. 3. Спецификаций преобразования, которые выглядят следующим образом: ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДї _ '%'['*'][ширина поля][точность]литера преобразования _ АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ Эта строка определяет, каким образом вводимые символы должны преобразовываться и записываться по соответ- ствующим аргументам-указателям. Преобразование продол- жается до первой неподходящей входной литеры или ис- черпания ширины поля. Символ '*' является флагом подавления присваивания. Он вызывает выполнение преобразования, но результат игно- рируется и для него не нужен соответствующий аргумент- -указатель. Если число аргументов-указателей меньше спецификаций преобразования, результат непредсказуем. Если же число аргументов-указателей больше, лишние указатели игнори- руются. Ширина поля (field_width) ДДДДДДДДДДДДДДДДДДДДДДДД Это последовательность десятичных цифр, определяю- щая максимальное число литер в поле ввода. Точность (precision) ДДДДДДДДДДДДДДДДДДДД L или l (Нижний регистр L) Если 'l' используется с одной из (d, i, o, u, x) литер преобразования, то она означает, что аргу- мент является указателем на long, а не на int. l или L флаг, при использовании (e) или (f) литер преобразования, означает, что аргумент является указателем на double, а не на float. h Аргумент является указателем на short. Литера преобразования (conv_char) ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД К литерам преобразования относятся: d Ожидается ввод целого числа, аргумент- -указатель должен быть указателем на int. e,f,g,E,G Ожидается ввод числа с плавающей за пятой. Формат числа такой же, как и в Cи. Аргумент должен быть указателем на float (или double, если используется 'l' или 'L'). i Ожидается ввод целого числа. Если число на- чинается с 0, оно воспринимается как восьме- ричное. Если число начинается с 0x или 0X, оно шестнадцатиричное. Аргумент должен быть указателем на int. b Ожидается ввод двоичного числа. Аргумент должен быть указателем на целое. o Ожидается ввод восьмеричного числа. Аргу- мент должен быть указателем на int. x,X Ожидается ввод шестнадцатиричного числа (адреса). Аргумент должен быть указателем на int. p Ожидается ввод шестнадцатиричного числа. Аргумент должен быть указателем на указа- тель. u Ожидается ввод беззнакового целого числа. Аргумент должен быть указателем на unsigned. n По указателю, заданному аргументом, записы- вается число литер, считанных к этому мо- менту при этом обращении к scanf(). [ Ожидается ввод строки литер. Между [ и закрывающей ] должны быть литеры, допусти- мые в этой строке. Если за скобкой [ сразу следует литера^, допустимыми литерами вво- димой строки являются все за исключением перечисленных между ^ и ]. Аргумент должен быть указателем на строку. В конце строки добавляется 0. s Ожидается ввод строки литер. Аргумент дол- жен быть указателем на строку. Поле вво- да заполняется до тех пор, пока не считает- ся пробел или литера новой строки, которые не являются частью поля ввода. К концу строки добавляется 0. c Ожидается ввод литеры. Аргумент должен быть указателем на литеру. Если определена шири- на поля (field_width), то считывается опре- деленное шириной поля число литер и аргу- мент в этом случае должен быть указателем на массив литер, достаточный для размещения результата. % Соответствует вводу литеры %. Символы преобразования e, g и x могут быть заглав- ными. Другие же символы будут давать непредсказуе- мые результаты. Неподходящие литеры остаются непро- читанными из входного потока. Нет прямого пути оп- ределения того, достигнуты ли точные соответствия или были подавления присваиваний, кроме использова- ния символа преобразования %n.
Использование
#include <stdio.h> int scanf(char *format,...); /* ANSI */ int fscanf(FILE *fp, char *format,...); /* ANSI */ int sscanf(char *buffer, char *format,...); /* ANSI */
Возвращаемое значение
Возвращается число присвоенных элементов ввода, исклю- чая преобразования с подавленным присваиванием. Если встречается конец файла до того, как были выполнены какие-либо присваивания и возникли какие-либо конфлик- ты (формата и ввода), возвращается значение EOF. Scanf() обычно завершает работу, когда достигает конца строки формата.
Пример
#include <stdio.h> main() { unsigned int result, val; printf("Введите десятичное число:"); result = scanf("%i", &val); printf("The decimal number [%d] is [%4x] hexadecimal", val, val); }
Рекомендация
Смотрите также printf, fscanf, sscanf