Согласно спецификации fscanf
в С17 7.21.6.2/8:
Входные пробельные символы (как определено функцией isspace
) пропускаются, если в спецификации не указан спецификатор [
, c
или n
Если строка формата содержит %%
, то это спецификация со спецификатором %
. Это не [
, c
или n
, поэтому стандарт, по-видимому, гласит, что здесь должны быть пропущены начальные пробелы.
У меня вопрос: это правильная интерпретация или это дефект в стандарте?
Я тестировал две разные реализации (mingw-w64 с MSVCRT stdio и mingw-w64 с MinGW stdio). Первый не пропустил начальные пробелы, последний сделал.
Тестовый код:
#include <stdio.h>
int main(void)
{
int a, r;
// Should be 1 according to standard; would be 0 if %% does not skip whitespace
r = sscanf("x %1", "x%% %d", &a);
printf("%d\n", r);
// Should always be 1
r = sscanf("x%1", "x%% %d", &a);
printf("%d\n", r);
}