Should I just redraw character sprite with each loop, with position depending on input? Is there some kind of method my brain cannot fathom?
You always need to redraw everything each loop. Essentially you want a your main loop to look something like this.
int main()
{
HandleInput(); // Do event processing
Update(); // Update all npcs/players/entities based on input
Draw(); // Draw everything to the screen
}