1

だから私が欲しいのは、ユーザーが上ボタンを押したときに、すぐにコマンドを表示し、^[[AI はキーボードから上と下を識別する方法を既に知っており、termios が解決策になるかもしれないことを知っていますが、 Javaのバックグラウンドから来たので、これを行う方法がよくわかりません。特定の制約により、Ncurses はオプションではありません。できれば、助けてください。

私が期待しているのは、ユーザーが上ボタンを押したときに、同じ行で即座にprintfを実行したいということです

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{

    char input[100];
    char *history[5];
    int currentHistory=0;
    int historyCount=5;
    history[0]="hi";
    history[1]="bye";
    history[2]="computer";
    history[3]="science";
    history[4]="Yo";


    while(input[0]!='Q')
    {
       if(input[0]==LEFT_ARROW;
    }


}
4

2 に答える 2

4

この機能やその他の機能は、GNU readlineまたは BSD editlineライブラリのいずれかにあります。これらはほとんど同じ機能を提供しますが、GNU readline ライブラリは GPL ライセンス下にあり、editline は BSD ライセンス下にあります。

于 2013-03-12T15:31:28.157 に答える
1

入力をより適切に処理したいのか、それとも端末の処理をより適切に処理したいのかは明確ではありません。

入力をより適切に処理したい場合は、「処理される」キーごとに定義された整数を返す関数に文字認識をラップすることをお勧めします。そうすれば、入力はより似ています

int char = readChar(input);
if (char == KEY_UP_ARROW) {
  ...
}

ここで、readChar は最初のキーがエスケープであるかどうかを検出し、「ピーク」して利用可能な追加情報があるかどうかを確認します (スタンドアロンのエスケープと矢印キーを区別するため)。

画面側をより適切に処理するつもりで、独自のラップされた端末処理ソフトウェアで端末を駆動することが目的である場合は、VT100 端末リファレンスを参照する必要があります (xterm が VT100 をエミュレートすると仮定します (多くの場合))。 VT100 コードについては、こちらで説明しています

オペレーティングシステムは入力時に追加の処理を行うことに注意してください(キーの組み合わせを組み合わせたり、プログラムがデッドキーキーボードのセットアップを簡単に区別できるようにするなど)、端末を別の「モード」にすることで、この端末内処理を無効にすることができます"。典型的なモードには、"cooked" と "raw" があり、"raw" は単純化のために結合されていないキー コードを提供します。

于 2013-03-12T15:44:03.207 に答える