Scanf договоренности - PullRequest
       1

Scanf договоренности

3 голосов
/ 14 декабря 2011

Я рассматриваю некоторые примеры в своей книге, и я пришел к тому, чего никогда раньше не видел и не понимаю:

scanf("%d-%d-%d-%d-%d", &prefix, &group, &publisher, &item, &check_digit);

Этот код является частью программы, которая просит пользователя ввести свой номер ISBN книги, а затем разбивает ISBN на Prefix = x, Group = y и т. Д.

Я НИКОГДА не видел гипс между %d. Кто-нибудь видит какой-либо смысл в этом ??

Спасибо

Ответы [ 4 ]

4 голосов
/ 14 декабря 2011

«Сопоставление с образцом». Если входные данные не соответствуют указанному шаблону (также называемому форматом), произойдет сбой. Поэтому, если вы введете что-то еще, кроме INT-INT-INT-INT-INT (где INT - это заполнитель для целого числа, которое вы вводите), ввод будет считаться недействительным.

3 голосов
/ 14 декабря 2011

Представляет фактические части строки для сканирования.

Например, ваш "%d-%d-%d-%d-%d" будет работать с чем-то вроде "10-56-666-1-90".

1 голос
/ 14 декабря 2011

scanf принимает строку формата, так что речь идет о том, какой ввод он ожидает увидеть для ввода. Дефисы для фактических дефисов во входных данных. 1-2-3-4-5-6 будет правильным вводом для этого вызова и даст вам prefix=1, group=2 и т. Д.

1 голос
/ 14 декабря 2011

Он анализирует 5 чисел (соответствует %d) с чертой между каждыми двумя (-).Каждое число сохраняется в переменную, переданную в качестве аргумента.См. Руководство для scanf и printf в разделе Conversions.

...