Что означает scanf ("% d /% d /% d) в C? - PullRequest
0 голосов
/ 04 июля 2019
int currD, currM, currY;
scanf("%d/%d/%d", &currD, &currM, &currY);

Я видел этот код, получающий дату рождения в формате ДД / ММ / ГГГГ, но мне интересно, что означает ввод '/', я знаю, что без этого это приведет к неправильному вводу из-за символа '/».Так что же это на самом деле значит?

Ответы [ 5 ]

1 голос
/ 04 июля 2019

Когда вы сталкиваетесь с кодом, который вы не понимаете и который вызывает функцию из библиотеки, ваш первый заказ - исследование документации для этой функции . Для стандартных функций языка C достаточно ввести название функции в Google.

Хорошая ссылка в этом случае - cppreference (не вводите в заблуждение название сайта, это ссылка на C, а не ссылка на C ++). Это дает определение функции как

int scanf( const char *format, ... );​

Теперь ищите описание параметра format:

указатель на символьную строку с нулевым символом в конце, указывающую, как читать ввод.

В последующем тексте объясняется, как читать строку формата. В частности:

  • […] символ [кроме %] в строке формата потребляет ровно один идентичный символ из входного потока или вызывает сбой функции, если следующий символ в потоке не сравнивается равным.
  • спецификации преобразования [в] следующем формате
    • вводный символ%
    • спецификатор формата преобразования
    • d - соответствует десятичному целому числу .

Другими словами:

scanf анализирует текстовый ввод на основе строки формата. Внутри строки формата / буквально соответствует косой черте в пользовательском вводе. %d соответствует десятичному целому числу.

Следовательно, scanf("%d/%d/%d", …) будет соответствовать строке, состоящей из трех целых чисел, разделенных косой чертой, и сохранит числовые значения внутри переменных, на которые указывают.

0 голосов
/ 04 июля 2019

Ожидается, что входные данные будут иметь формат трех целых чисел, разделенных двумя косыми чертами ("/").Например: 10/11/1999.

0 голосов
/ 04 июля 2019

Первый параметр scanf - это строка, указывающая формат строки, которую вы хотите использовать для хранения информации в дальнейших аргументах.Вы можете увидеть эту строку формата в виде шаблона:% d означает целое число, а без «%» это означает, что оно просто должно точно соответствовать символам.

0 голосов
/ 04 июля 2019

Ввод ожидается как 04/07/2019.Если ввод предоставлен только 04072019. Только currD содержит значение 04072019, currM и currY могут содержать мусор, поскольку оно не инициализировано.

0 голосов
/ 04 июля 2019

Это просто разделитель в формате даты.Ошибка должна возникать, когда какая-то функция ищет эти / .

...