Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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


<суб > Сноска:суб >

<суб > 1. fscanf

Ответ 3

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

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

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

и относительно поведения,

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

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

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

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

является отлично действующим.

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