Outra maneira, que é bem mais fácil, é notar que isso não precisa de fazer tantas coisas assim. Na verdade é só um teste de atenção.
Digamos que o aniversário seja no dia d/m/a.
d/m/a + (18 anos e 2 meses) = ?
Se for 18 anos, então a data requerida seria em (d / m / (a + 18 ))
Mas são 18 anos e 2 meses, então d / (m + 2) / (a + 18 )
Só que você sabe que não existe um mês 13 ou 14, então nesse caso você tem de virar o ano, seria algo como:
Se m + 2 for 13 ou 14, então adicione mais 1 ao ano e passe o mês para 1 ou 2.
Ainda não está certo - o que ocorre quando o mês é 2 e o dia é 29, 30 ou 31?
Nesse caso, você provavelmente vai dar um desconto, e deixar para o dia 28.
Converta isso para pseudocódigo…