Функции библиотеки C -sscanf()
Стандартная библиотека C - <stdio.h>
Описание
Функции библиотеки Cint sscanf(const char *str, const char *format, ...)Чтение форматированного ввода из строки.
Объявление
Ниже приведено объявление функции sscanf().
int sscanf(const char *str, const char *format, ...)
Параметр
- str-- Это строка C, из которой функция извлекает данные.
- format-- Это строка C, содержащая один или несколько из следующих элементов:пробельные символы, непробельные символыиспецификаторы формата。
Спецификатор формата имеет вид[=%[*][width][modifiers]type=], с подробным объяснением ниже:
| Параметр | Описание |
|---|---|
| * | Это необязательная звёздочка, означающая, что данные считываются из потока, но могут быть проигнорированы, т. е. не сохраняются в соответствующем аргументе. |
| width | Задаёт максимальное количество символов, которые нужно прочитать в текущей операции чтения. |
| модификаторы | Задаёт размер, отличный от размера для целого (для d, i и n), беззнакового целого (для o, u и x) или числа с плавающей запятой (для e, f и g), для данных, на которые указывает соответствующий дополнительный аргумент: h : short int (для d, i и n) или unsigned short int (для o, u и x) l : long int (для d, i и n), или unsigned long int (для o, u и x), или double (для e, f и g) L : long double (для e, f и g) |
| type | Символ, задающий тип считываемых данных и способ их чтения. Подробности см. в следующей таблице. |
Спецификаторы типа sscanf:
| Type | Квалифицирующий ввод | тип аргумента |
|---|---|---|
| c | Одиночный символ: читает следующий символ. Если указана ширина, отличная от 1, функция читает width символов и сохраняет их в последовательных позициях массива, переданного как аргумент. Нулевой символ в конце не добавляется. | char * |
| d | Десятичное целое: знак + или - перед числом необязателен. | int * |
| e,E,f,g,G | Число с плавающей запятой: содержит десятичную точку, необязательный ведущий знак + или -, необязательный завершающий символ e или E и десятичные цифры. Два допустимых примера: -732.103 и 7.12e4 | float * |
| o | Восьмеричное целое число. | int * |
| s | Строка. Считывает последовательные символы до тех пор, пока не встретится пробельный символ (пробельными символами могут быть пробел, новая строка и табуляция). | char * |
| u | Беззнаковое десятичное целое число. | unsigned int * |
| x,X | Шестнадцатеричное целое число. | int * |
Дополнительные аргументы-- Эта функция принимает ряд указателей в качестве дополнительных аргументов, каждый из которых указывает на объект, тип которого задан соответствующим тегом % в строке формата. Аргументы идут в том же порядке, что и теги %.
Для каждого спецификатора формата в строке формата, который извлекает данные, следует указать дополнительный параметр. Если вы хотите сохранить результат операции sscanf в обычной переменной, перед идентификатором следует поставить оператор взятия адреса (&), например:
int n; sscanf (str,"%d",&n);
Возвращаемое значение
В случае успеха функция возвращает количество успешных сопоставлений и присваиваний. Если достигнут конец файла или произошла ошибка чтения, она возвращает EOF.
Пример
В следующем примере демонстрируется использование функции sscanf().
Пример
#include <stdlib.h>
#include <string.h>
int main()
{
int day, year;
char weekday[20], month[20], dtm[100];
strcpy( dtm, "Saturday March 25 1989" );
sscanf( dtm, "%s %s %d %d", weekday, month, &day, &year );
printf("%s %d, %d = %s\n", month, day, year, weekday );
return(0);
}
Давайте скомпилируем и запустим приведённую выше программу, которая выдаст следующий результат:
March 25, 1989 = SaturdayДругие расширения