- Вы проверяли статус возврата с
sscanf()
?
- Какое число вы ожидали преобразовать в строку в виде x?
- Так как каждый вызов
sscanf()
начинается в начале, 'Age2:' не совпадает с 'Age1:', и, следовательно, преобразование не выполняется.
Обратите внимание, что любой символ в строке формата, который не является частью спецификатора преобразования, должен точно совпадать. Таким образом, когда сканирование видит 2 из «Age2», оно находит 1 из «Age1» в строке, и сканирование завершается с ошибкой в этой точке. Исключением является то, что пробелу соответствует любая последовательность пробелов - см. Код ниже.
Пример кода:
#include <stdio.h>
int main(void)
{
const char string[] = "Age1: 3\r\nAge2: 5\r\n";
const char *scan[] = { "Age1: %d", "Age2: %d", "Age1: %d Age2: %d" };
int age1, age2;
int rc;
if ((rc = sscanf(string, scan[0], &age1)) != 1)
printf("scan failed on '%s'\n", scan[0]);
else
printf("scan passed on '%s' - age %d\n", scan[0], age1);
if ((rc = sscanf(string, scan[1], &age2)) != 1)
printf("scan failed on '%s'\n", scan[1]);
else
printf("scan passed on '%s' - age %d\n", scan[1], age2);
if ((rc = sscanf(string, scan[2], &age1, &age2)) != 2)
printf("scan failed on '%s'\n", scan[2]);
else
printf("scan passed on '%s' - age1 %d, age2 %d\n", scan[2], age1, age2);
return 0;
}
Пример вывода
scan passed on 'Age1: %d' - age 3
scan failed on 'Age2: %d'
scan passed on 'Age1: %d Age2: %d' - age1 3, age2 5