Вам нужно объявить struct Date
, прежде чем использовать его в прототипе функции для dif_days()
.
. Вы можете переместить все определение struct
так, чтобы оно предшествовало прототипу функции,или вы можете использовать прямое объявление для struct
, добавив перед прототипом функции:
struct Date;
Кроме того, вам необходимо удалить завершающие пробельные символы из строк формата scanf()
. Это портит интерактивный ввод и не делает того, что люди обычно ожидают. Обратите внимание, что директива %d
автоматически игнорирует начальные пробельные символы и фактически единственные директивы scanf()
, которые не игнорируйте начальные пробелы %c
, %n
и %[]
.
И пока мы обсуждаем scanf()
, вы должны проверить значение, возвращаемое вызовамидо scanf()
, чтобы убедиться, что ввод соответствует ожидаемому.Как только совпадение в строке форматирования завершится неудачно, scanf()
перейдет без сохранения чего-либо в оставшихся переменных.Неверные вводы приведут к неопределенному поведению, когда код попытается использовать неопределенные значения.Здесь scanf()
вернет 3, если введены три числа, и для базовой проверки вы можете проверить, действительно ли пользователь ввел три числа, прежде чем продолжить.