>>682
見直してみたら2回じゃなくて3回か。

再帰処理の流れを勘違いしてるかも。
再帰呼び出しから戻ってきたら残りの処理を続けるのよ?

だから、矢印キー↑を押した場合、0xE0 0x48の2文字になり
その場合の処理の流れは多分こう。

main()のwhileループでkey_press()呼び出し。
 1文字目0xE0、key_press()内switchにてdefault行きでkey_press()呼び出し。
   2文字目0x48、key_press()内case KEY_SUB_UP:で処理。
   2文字目0x48、key_press()内paint()とsleep()。
 1文字目0xE0、defaultで呼び出したkey_press()から戻ってきてpaint()とsleep()。
main()に戻ってwhileループ最初のpaint()実行。

基本的にはmain()のpaitn()さえあればokなんじゃない?
sleepの必要性もよくわからん。