1. ホーム
  2. c

[解決済み] Ubuntuで矢印キーを押すとターミナルに「^[[A""^[[B""^[[C""^[[D]」と表示されるのはなぜですか?

2022-02-16 11:40:58

質問内容

最初にWindowsでAnsi Cで小さなプログラムを書いて、今Ubuntuで内蔵のGCCでコンパイルしました。

プログラムは単純です。

  • でコンソールから行を読み取る。 scanf() .
  • 文字列を解析して計算する。

しかし、変なことが起こります。カーソルを動かそうとすると、4文字がプリントされるのです。

  • 押す 上へ は"を表示します。 ^[[A "
  • プレス Dn は"を表示します。 ^[[B "
  • プレス Rt は " を表示します。 ^[[C "
  • プレス Lt は"を表示します。 ^[[D "

  • どうすれば回避できるのでしょうか?

  • なぜカーソルを移動させる代わりに、この4文字を表示するのですか?

解決方法は?

なぜなら、キーボードが実際にPCに送るもの(より正確には、キーボードから実際に受け取ったものに対して端末が印字するもの)だからです。 bash そのため、カーソルを移動させるか(left/right の場合)、履歴を使用して以前のコマンドを取得します(up/down の場合)。ですから、あなたのプログラムが魔法のように矢印キーをサポートすることを期待することはできません。

しかし ターミナルからの標準入力の読み込みは、すでに左/右矢印キーをサポートしています(と信じていますが、私は今、テストして確認するためにLinuxにいないのです)。ですから、私の推測では、別の問題が干渉しているのだと思います。1つの原因として、修飾キーの1つが動かなくなっている可能性があります。ALT、CTRL、SUPERなどでしょうか?