Что означает Звездочка в спецификаторе формата scanf? [дубликат]

этот вопрос уже есть ответ здесь:

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

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

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

может кто-нибудь пролить свет на это?

3 ответов


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


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


Примечания:

1. функции fscanf


цитировать C11 стандарт, глава §7.21.6.2,fscanf ()

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

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

а что касается поведения,

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

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

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

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

это прекрасно действует заявление.

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