Если вы хотите, чтобы это было сделано в sscanf
, это можно сделать следующим образом:
if (sscanf(str, "%*2d%2d/%2d/%2d", &y, &m, &d) != 3)
goto err;
РЕДАКТИРОВАТЬ:
Добавьте в качестве примера некоторые проверки:
if (sscanf(str, "%*2d%2d/%2d/%2d", &y, &m, &d) != 3)
goto err;
if (sscanf(str, "%4d", &tmp) != 1)
goto err;
if (tmp < 1900)
goto err_year;
sscanf
имеет поле максимальной ширины, а не поле точной ширины, поэтому вам нужно проверить вручную, вводит ли пользователь трехзначный год, и подумать, что делать, если так
Я бы не сталне используйте его в этом случае, потому что вам все еще нужно прочитать четыре цифры для проверки, поэтому решение @ chux является лучшим в этом случае:
if (sscanf(str, "%4d/%2d/%2d", &year, &m, &d) != 3)
goto err;
if (year < 1900)
goto err_year;
y = year % 100;