Creo haber dado con el error aunque no estoy seguro porque hace 6 años que no toco C. Donde pone:
else
if (dia <= max);
te sobra el ';' que hay detrás del paréntesis y luego si los 3 printf que hay a continuación están dentro de ese if creo recordar que los tenías que meter dentro de { } de lo contrario siempre te mostrarán el contenido de las variables dia, mes y año y no cuando se cumpla la condición. Si sólo tenías una sentencia dentro del if/else/while... no hacía falta. Prueba a ver.