Оператор >>
в этом случае перестает нормально читать, только когда встречается с пробелом.При попытке чтения в месяце оператор нажимает символ /
и поднимает флаг ошибки в потоке, поскольку этот символ не является ни частью целого числа, ни пробелом.После поднятия флага ошибки две следующие операции чтения ничего не делают, оставляя day
и year
неинициализированными.
Используйте std::getline()
, чтобы отделить части входной строки, и проанализируйте их с помощью std::stoi()
.
С високосными годами можно легко справиться, добавив проверку в свои заявления if
, проверяющие, является ли год високосным годом, и используя отдельное условие для этого случая, когда вы проверяете, является ли деньдействительный.