Функции библиотеки 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.12e4float *
%iЧитает десятичные, восьмеричные и шестнадцатеричные целые числа.int *
%oВосьмеричное целое число.int *
%sСтрока. Читает последовательные символы до тех пор, пока не встретится пробельный символ (пробельными символами могут быть пробелы, символы новой строки и табуляции).char *
%uБеззнаковое десятичное целое число.unsigned int *
%x、%XШестнадцатеричное целое число.int *
%p Читает указатель. 
%[] Сканирует набор символов. 
%% Считывает знак %. 
  • Дополнительные аргументы-- В зависимости от строки формата функция может потребовать ряд дополнительных аргументов, каждый из которых содержит значение для вставки, заменяющее каждый тег %, указанный в аргументе формата. Количество аргументов должно совпадать с количеством тегов %.

Возвращаемое значение

В случае успеха функция возвращает количество успешно сопоставленных и присвоенных элементов. Если достигнут конец файла или возникает ошибка чтения, она возвращает EOF.

Пример

Следующий пример демонстрирует использование функции scanf().

Пример

#include<stdio.h> int main(void) { int a,b,c; printf("Введите три числа:"); scanf("%d%d%d",&a,&b,&c); printf("%d,%d,%d\n",a,b,c); return 0; }

Давайте скомпилируем и запустим вышеприведённую программу; в интерактивном режиме она выдаст следующий результат:

请输入三个数字:1 2 3
1,2,3

Примечания по разбору:

  • 1, &a、&b、&cin&— оператор адреса, который соответственно получает адреса памяти этих трёх переменных.
  • 2, %d%d%dОн вводит три числовых значения в десятичном формате. При вводе для разделения двух элементов данных можно использовать один или несколько пробелов, клавиши Tab или клавиши Enter.
Если используется,для разделения ввода%d, то его также нужно добавить при вводе соответствующего значения,:

Пример

#include<stdio.h> int main(void) { int a,b,c; printf("Введите три числа:"); scanf("%d, %d, %d",&a,&b,&c); printf("%d, %d, %d\n",a,b,c); return 0; }

Давайте скомпилируем и запустим вышеприведённую программу; в интерактивном режиме она выдаст следующий результат:

请输入三个数字:1, 2, 3
1, 2, 3

Примечание:При вводе,должен сразу следовать за числом; между числом и,не допускаются пробелы.

При использовании %c для ввода пробелы и "escape-символы" одинаково считаются допустимыми символами.

Пример

#include<stdio.h> int main(void) { char a,b,c; printf("Введите три символа:"); scanf("%c%c%c",&a,&b,&c); printf("%c,%c,%c\n", a,b,c); return 0; }

Давайте скомпилируем и запустим вышеприведённую программу; в интерактивном режиме она выдаст следующий результат:

$ ./a.out 
请输入三个字符:run
r,u,n
$ ./a.out 
请输入三个字符:r u n
r, ,u

Следующий пример демонстрирует получение строки:

Пример

#include <stdio.h> int main() { char str1[20], str2[30]; printf("Введите имя пользователя:"); scanf("%s", str1); printf("Введите ваш веб-сайт:"); scanf("%s", str2); printf("Введенное имя пользователя: %s\n", str1); printf("Введенный веб-сайт: %s", str2); return(0); }

Давайте скомпилируем и запустим вышеприведённую программу; в интерактивном режиме она выдаст следующий результат:

请输入用户名:admin
请输入您的网站:www.example.com
输入的用户名:admin
输入的网站:www.example.com

Стандартная библиотека C - <stdio.h>

Другие расширения