Что означает Звездочка в спецификаторе формата 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 таким образом, символ будет считан, но не назначен какой-либо переменной.
Примечания:
цитировать C11
стандарт, глава §7.21.6.2,fscanf ()
[...] Каждая спецификация преобразования вводится символом
%
. После % последовательно отображаются следующие значения:- необязательное назначение-подавление символа
*
.
- [...]
- А спецификатор преобразования символ
а что касается поведения,
[..] Если только подавление назначения не было указано
*
, в результат преобразования помещается в объект, на который указывает первый аргумент, следующий аргумент format, который еще не получил результат преобразования. [...]
это означает, что в случае спецификатор формата, как "%*c"
, a char
будет прочитано от stdin
но отсканированное значение не будет сохранено или назначено чему-либо. Таким образом, вам не нужно поставить соответствующий параметр.
Итак, в данном случае,
scanf("%d%*c", &word_count);
это прекрасно действует заявление.
например, то, что он делает в среде *Nix, чтобы очистить входной буфер от newline
, который хранится из-за нажатия ENTER ключ после ввода.