gets() es un problema por ese motivo. Lo mas fiable es usar la interrupcion y usar getch(), ya que al ocurrir la interrupcion hay 1 solo dato y el getch siempre va a tener un valor.
Luego lo almacenas en un array ( el mismo que usas para el gets) y cuando detectas el retorno de carro o salto de linea \r\n procedes a terminar el array con 0x00 y activar una variable de 1 bit, avisandole al main que tu dato ya esta y puede leerlo.