Читать «C++: базовый курс» онлайн - страница 340
Herbert Schildt
%[XYZ]
Соответствующая набору переменная должна быть указателем на массив символов. При возврате из функции
/* Простой пример использования набора сканируемых символов.
*/
#include <stdio.h>
int main()
{
char s1 [80], s2 [80];
printf("Введите числа, а затем несколько букв:\n");
scanf("%[0123456789]%s", s1, s2);
printf("%s %s", s1, s2);
return 0;
}
Многие компиляторы позволяют с помощью дефиса задать в наборе сканируемых символов диапазон. Например, при выполнении следующей инструкции функция
% [А-Z]
При этом в наборе сканируемых символов можно задать даже несколько диапазонов. Например, эта программа считывает сначала цифры, а затем буквы.
/* Пример использования в наборе сканируемых символов нескольких диапазонов.
*/
#include <stdio.h>
int main()
{
char s1[80], s2 [80];
printf("Введите числа, а затем несколько букв:\n");
scanf("%[0-9]%[a-zA-Z]", s1, s2);
printf ("%s %s", s1, s2);
return 0;
}
Если первый символ в наборе сканируемых символов является знаком вставки (
/* Пример использования набора сканируемых символов для запрещения считывания указанных в нем символов.
*/
#include <stdio.h>
int main()
{
char s1[80], s2[80];
printf("Введите не цифры, а затем не буквы:\n");
scanf("%[^0-9]%[^a-zA-Z]", s1, s2);
printf ("%s %s", s1, s2);
return 0;
}
Важно помнить, что набор сканируемых символов различает прописные и строчные буквы. Следовательно, если вы хотите сканировать как прописные, так и строчные буквы, задайте их отдельно.
Некоторые спецификаторы формата могут использовать такие модификаторы, которые точно указывают тип переменной, принимающей данные. Чтобы прочитать длинное целое, поставьте перед спецификатором формата модификатор
По умолчанию спецификаторы