Fragmento con el ;
Tu código:
while(n <= b);
{
resultado = resultado * a;
n = n++;
}
Lo que el compilador interpreta como dentro del while
while(n <= b);
//nada más
Sin el ; el while tiene el efecto que tu deseas
while(n <= b)
{
resultado = resultado * a;
n = n++;
}
La diferencia entre la aparición del ; y no, es que el while no tiene instrucciones dentro. O dicho de otra forma, el ; marca el final del bloque while