Quando a função scanf encontra o que ela estava procurando ela pára o "cursor" de leitura no stream. Dependendo do caso, isso acontece antes do enter, e aí quando você dá getchar ele pega justamente esse enter.
A solução mais comum quando você sabe que isso vai acontecer é simplesmente usar um outro getchar (ou scanf de %c) para limpar esse enter.
Mas talvez haja soluções melhores...
Fórum