確かにキャンセルと空文字列の区別ができないですね。改善したいですが色々変更が必要なので時間が掛かりそうです。とりあえず、"x%*input()" だと空欄ならキャンセル、頭に"x"があれば入力文字になります(その後、頭1文字を除去して使用します。)。