Avevo lo stesso problema, praticamente mettendo tutto nello stesso if, il programma risolve prima la possibilità gg > 28 e stampa sempre come data errata se gli fornisci come input una qualsiasi data che abbia più di 28 giorni a febbraio(anche se bisestile).
Ho risolto semplicemente facendo un altro if con condizione opposta alla verifica dell'anno bisestile.