Что означает звездочка в спецификаторе формата scanf?

Поэтому я наткнулся на этот код, и я не смог понять, в чем его цель или как он работает:

int word_count; scanf("%d%*c", &word_count); 

Моя первая мысль заключалась в том, что %*d ссылался на указатель char или запрещал word_count принимать переменные char .

Может кто-то пролить свет на это?

    *c означает, что символ будет читаться, но не будет назначен, например, для ввода «30a» он назначит 30 для word_count , но «a» будет проигнорирован.

    * In "%*c" означает assignment-suppressing character * : если эта опция присутствует, функция не присваивает результат преобразования ни одному принимающему аргументу. 1 Таким образом, символ будет считан, но не назначен какой-либо переменной.


    Примечания:

    1. fscanf

    Чтобы процитировать стандарт C11 , раздел §7.21.6.2, fscanf ()

    […] Каждая спецификация преобразования вводится символом % . После% появляются следующие последовательности:

    – Дополнительный символ подавления присваивания * .
    – […]
    Символ спецификатора преобразования

    и в отношении поведения,

    [..] Если исключение присваивания не было указано символом * , результат преобразования помещается в объект, на который указывает первый аргумент, следующий за аргументом формата, который еще не получил результат преобразования. […]

    Это означает, что в случае спецификатора формата, такого как "%*c" , char будет считываться из stdin но отсканированное значение не будет храниться или не привязываться к чему-либо. Таким образом, вам не нужно указывать соответствующий параметр.

    Итак, в этом случае,

     scanf("%d%*c", &word_count); 

    является вполне допустимым утверждением.

    Например, то, что он делает в среде * nix, – это очистить входной буфер от newline которая сохраняется из-за нажатия клавиши ENTER после ввода.