I use GNU Readline in the \"select\" fashion, by registering a callback function like so:
rl_callback_handler_install(\"\", on_readline_input);
This also seems to work:
rl_clear_visible_line(); printf(...); rl_reset_line_state(); rl_redisplay();