Функции библиотеки C -scanf()
Стандартная библиотека C - <stdio.h>
Описание
Функции библиотеки Cint scanf(const char *format, ...)Читает форматированный ввод из стандартного ввода stdin.
Объявление
Ниже приведено объявление функции scanf().
int scanf(const char *format, ...)
Параметр
- format-- Это строка C, содержащая один или несколько из следующих элементов:пробельные символы, непробельные символыиспецификаторы формата。
Спецификатор формата имеет следующий вид:
[=%[*][width][modifiers]type=]
Подробное объяснение выглядит следующим образом:
| Параметр | Описание |
|---|---|
| * | Это необязательная звёздочка, означающая, что данные считываются из потока, но могут быть проигнорированы, т. е. не сохраняются в соответствующем аргументе. |
| width | Задаёт максимальное количество символов, которые нужно считать в текущей операции чтения. |
| модификаторы | Задаёт размер, отличный от целого (для d, i и n), беззнакового целого (для o, u и x) или числа с плавающей точкой (для e, f и g) для данных, на которые указывает соответствующий дополнительный аргумент: h: короткое целое (для d, i и n) или беззнаковое короткое целое (для o, u и x) l: длинное целое (для d, i и n), или беззнаковое длинное целое (для o, u и x), или двойная точность (для e, f и g) L: длинная двойная точность (для e, f и g) |
| type | Символ, задающий тип читаемых данных и способ их чтения. Подробности см. в следующей таблице. |
Спецификаторы типа scanf:
| Type | Квалифицирующий ввод | тип аргумента |
|---|---|---|
| %a、%A | Считывает значение с плавающей точкой (допустимо только в C99). | float * |
| %c | Одиночный символ: читает следующий символ. Если указана ширина, отличная от 1, функция читает width символов и через аргумент сохраняет их в последовательных позициях массива. Нулевой символ в конце не добавляется. | char * |
| %d | Десятичное целое: знак + или - перед числом необязателен. | int * |
| %e、%E、%f、%F、%g、%G | Число с плавающей точкой: содержит десятичную точку, необязательный ведущий знак + или -, необязательный завершающий символ e или E и десятичное число. Два допустимых примера: -732.103 и 7.12e4 | float * |
| %i | Читает десятичные, восьмеричные и шестнадцатеричные целые числа. | int * |
| %o | Восьмеричное целое число. | int * |
| %s | Строка. Читает последовательные символы до тех пор, пока не встретится пробельный символ (пробельными символами могут быть пробелы, символы новой строки и табуляции). | char * |
| %u | Беззнаковое десятичное целое число. | unsigned int * |
| %x、%X | Шестнадцатеричное целое число. | int * |
| %p | Читает указатель. | |
| %[] | Сканирует набор символов. | |
| %% | Считывает знак %. |
- Дополнительные аргументы-- В зависимости от строки формата функция может потребовать ряд дополнительных аргументов, каждый из которых содержит значение для вставки, заменяющее каждый тег %, указанный в аргументе формата. Количество аргументов должно совпадать с количеством тегов %.
Возвращаемое значение
В случае успеха функция возвращает количество успешно сопоставленных и присвоенных элементов. Если достигнут конец файла или возникает ошибка чтения, она возвращает EOF.
Пример
Следующий пример демонстрирует использование функции scanf().
Пример
Давайте скомпилируем и запустим вышеприведённую программу; в интерактивном режиме она выдаст следующий результат:
请输入三个数字:1 2 3 1,2,3
Примечания по разбору:
- 1, &a、&b、&cin&— оператор адреса, который соответственно получает адреса памяти этих трёх переменных.
- 2, %d%d%dОн вводит три числовых значения в десятичном формате. При вводе для разделения двух элементов данных можно использовать один или несколько пробелов, клавиши Tab или клавиши Enter.
Пример
Давайте скомпилируем и запустим вышеприведённую программу; в интерактивном режиме она выдаст следующий результат:
请输入三个数字:1, 2, 3 1, 2, 3
Примечание:При вводе,должен сразу следовать за числом; между числом и,не допускаются пробелы.
При использовании %c для ввода пробелы и "escape-символы" одинаково считаются допустимыми символами.
Пример
Давайте скомпилируем и запустим вышеприведённую программу; в интерактивном режиме она выдаст следующий результат:
$ ./a.out 请输入三个字符:run r,u,n $ ./a.out 请输入三个字符:r u n r, ,u
Следующий пример демонстрирует получение строки:
Пример
Давайте скомпилируем и запустим вышеприведённую программу; в интерактивном режиме она выдаст следующий результат:
请输入用户名:admin 请输入您的网站:www.example.com 输入的用户名:admin 输入的网站:www.example.comДругие расширения