Devias ter colocado essa duvida no inicio então, porque não foi isso que pediste/perguntaste.
O ; significa que estas a finalizar uma "linha" de instrução. Ou seja, printf("ola"); significa que a instrução acabou ali no ; e a seguir podes colocar logo outra.
Podes colocar ; em todo o lado que é valido, se colocares a finalizar um loop (ciclo) a instrução vai ser vazia, ou seja, o loop processa todo mas não faz nada porque a instrução é vazia.
Colocares {} significa que estas a criar um bloco de instruções, o facto do bloco estar assim deve estar a confundir-te... é a mesma coisa que:
j = 0;
while (j<10) {
}
printf("-> %i \n",j++);
Ou seja, o while não tem instruções, como necessitas de incrementar o j até ser >= 10 nunca vais sair do loop, entras portanto em loop infinito e nunca vais entrar no printf().