Функция scanf() поддерживает спецификатор формата общего назначения, называемый множеством сканирования. Множество сканирования определяет набор символов. Когда scanf() обрабатывает множество сканирования, она вводит символы до тех пор, пока символы являются частью множества сканирования. Читаемые символы сохраняются в символьном массиве, на который указывает соответствующий аргумент. Для определения множества сканирования необходимо поместить сканируемые символы в квадратные скобки. Открываемой квадратной скобке должен предшествовать %. Например, следующее множество сканирования сообщает функции scanf() о необходимости только чтения символов X, Y и Z:
%[XYZ]
При использовании множества сканирования функция scanf() продолжает читать символы и помещает их в соответствующий массив символов, пока не встретится символ, не принадлежащий множеству сканирования. После возврата каретки из scanf() массив будет содержать оканчивающуюся нулевым символом строку, состоящую из введенных символов. Чтобы понять, как это работает, рассмотрим программу:
#include <stdio.h>
int main(void)
{
int i;
char str[80], str2[80];
scanf(“%d%[abcdefg]%s”, &i, str, str2);
printf(“%d %s %s”, i, str, str2);
}
Введем 123abcdtye, после чего нажмем <Enter>. Программа отобразит 123 abcd tye. Поскольку символ «t» не является частью множества сканирования, scanf() останавливает чтение символов в strпри обнаружении «t». Оставшиеся символы помещаются в str2.
Можно указать диапазоны множества сканирования, используя дефис. Например, следующая команда говорит функции scanf() о необходимости чтения символов от «А» до «Z»:
%[A-Z]