Hola!
Cita: para entrar el dato se debe darlo dos veces, no se porque
eso se debe al bucle while que esta
antes del scanf. Como ya sabes ese bucle lo que hace es limpiar el bufer, pero cuando el programa se ejecuta el bufer del teclado esta limpio por lo tanto el getchar espera por caracteres hasta encontrar '\n'(una vez encontrado el '\n' por el getchar() recien scanf pide el ingreso)...
Código C:
Ver originaldo
while ((ju == '\n') && (ju != '1' || ju != '2' || ju != '3'));
ju es una variable de tipo int por lo tanto compararlo con el ascii de esos caracteres no tiene sentido ya que siempre va a ser falso la condicion(ju deberia ser un char para hacer uso del do-while)
Saludos