что такое идентификаторы формата scanf (“% * s”) и scanf (“% * d”)?

Каково практическое использование форматов "%*" в scanf (). Если этот формат существует, для него должна быть какая-то цель. Следующая программа дает странный вывод.

 #include int main() { int i; char str[1024]; printf("Enter text: "); scanf("%*s", &str); printf("%s\n", str); printf("Enter interger: "); scanf("%*d", &i); printf("%d\n", i); return 0; } 

Вывод:

 [email protected]:~$ gcc -Wall -pedantic dc dc: In function 'main': dc:8: warning: too many arguments for format dc:12: warning: too many arguments for format [email protected]:~$ ./a.out Enter text: manav D Enter interger: 12345 372 [email protected]:~$ 

Для printf * позволяет указать минимальную ширину поля с помощью дополнительного параметра, то есть printf("%*d", 4, 100); задает ширину поля 4.

Для scanf * указывает, что поле должно быть прочитано, но проигнорировано, так что scanf("%*d %d", &i) для ввода «12 34» будет игнорировать 12 и считать 34 в целое число i.

Звезда – это символ флага, который говорит, что игнорирует текст, прочитанный спецификацией. Для получения документации glibc:

Необязательный символ флага `* ‘, в котором говорится игнорировать текст, прочитанный для этой спецификации. Когда scanf находит спецификацию преобразования, которая использует этот флаг, она считывает входные данные, как указано остальной частью спецификации преобразования, но отбрасывает этот вход, не использует аргумент указателя и не увеличивает количество успешных назначений.

Это полезно в ситуациях, когда строка спецификации содержит более одного элемента, например: scanf("%d %*s %d", &i, &j) для "12 test 34" – где i & j – целые числа, и вы хочу игнорировать остальные.

См. Здесь

Необязательная стартовая звездочка указывает, что данные должны быть извлечены из stdin, но проигнорированы, то есть они не сохраняются в соответствующем аргументе.

* Используется для пропуска ввода без посылки его в любую переменную. Итак, scanf("%*d %d", &i); будет читать два целых числа и поставить второй в i .

Значение, которое было выведено в вашем коде, – это просто значение, которое было в неинициализированной переменной i – вызов scanf не изменил ее.

В scanf("%*d",&a) * пропускает вход. Для чтения входных данных необходимо использовать дополнительный "%d" в scanf . Например:

  int a=1,b=2,c=3; scanf("%d %*d %d",&a,&b,&c); //input is given as: 10 20 30 

O / P:

 a=10 b=30 and c=3; // 20 is skipped 

Если вы используете другой %d то есть: scanf("%d %*d %d %d",&a,&b,&c); //input is given as: 10 20 30 40 scanf("%d %*d %d %d",&a,&b,&c); //input is given as: 10 20 30 40 тогда a = 10 b = 30 c = 40.

Если вы используете "," в scanf, тогда никакое значение не будет принято после %*d ie; scanf("%d %*d,%d" &a,&b,&c)// 10 20 30 O / p: a = 10 b = 2 c = 3 будет выходом.

  • Показывать число до двух знаков после запятой
  • Как я могу поместить целое число с нулями слева?
  • Эквивалент Sprintf в Java
  • Как изменить цвет фона ячейки в пользовательском форматировании jqgrid?
  • Установить цвет области TextView в Android
  • C # конвертировать int в строку с нулями заполнения?
  • Как избежать фигурных скобок (фигурные скобки) в строке формата в .NET.
  • Вставить текст в textarea с помощью jQuery
  • Как установить языковой стандарт cout для вставки запятых в качестве разделителей тысяч?
  • форматируйте число с запятыми и десятичными знаками в C # (asp.net MVC3)
  • Как читать числа с запятой в виде десятичного разделителя?
  • Interesting Posts

    Каков наилучший способ реализовать этот составной GetHashCode ()

    Использование XSL-FO, CSS3 вместо CSS2 для создания разбитых на страницы документов, таких как PDF?

    Могу ли я поместить элемент, фиксированный относительно родителя?

    Ширина UIWebView iPhone не подходит после операции масштабирования + изменение UIInterfaceOrientation

    Замена fragmentа другим fragmentом внутри группы действий

    Реестр Windows – почему (и где) это существует?

    Безопасно удалить OSX's / private / var / folders / * при перезагрузке?

    Когда мне нужен чистый ИБП с синусоидальной волной?

    Как выполнить команду MySQL из сценария оболочки?

    Ограничить результаты в автозаполнении пользовательского интерфейса jQuery

    ASP.NET MVC4 Объединение с Twitter Bootstrap

    Время в системе NTP, отличное от времени аппаратного обеспечения

    Есть ли способ иметь команду выбора в пакетных файлах – и ждать меньше секунды

    Подозрительный трафик имен NetBios

    Entity Framework 4 Удалить объект из коллекции объектов

    Давайте будем гением компьютера.