Что означает Звездочка в спецификаторе формата 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 ключ после ввода.