0

次のようなchar配列に保存された入力をどのようにテストできるか疑問に思っていました...

   char input[INPUT_SIZE];

そして使用して

fgets(input,INPUT_SIZE,stdin);

ユーザーからの入力を取得するには、if ステートメントを使用して、ユーザーの入力がたとえば ctrl+dまたは any ctrl+ anykey であるかどうかをテストする方法を知りたいと思っていましたか?

私はこのような ascci 値を使用しようとしました.. ctrl d をテストする例です

  if(result = 'EOT') {printf("EOT");}

結果もchar配列です。

4

1 に答える 1

1

Ctrl+dを返す読み取りとしてのみテストできますEOF。詳細については、読み取りのマニュアルを参照してください。ただし、通常は 0 を返します。どちらもプログラムにシグナルを送信しているため、 Ctrl+についても同様です。c

その他のCtrl+ キーの組み合わせについては、システムに大きく依存します。

Linuxでは、シェルまたは emacs でCtrl+aおよびCtrl+eを実行すると、それぞれ行の先頭または末尾 / 先頭に移動します。

必要なものを取得する最も簡単な方法は、8 バイトのバッファーを使用してバッファーなし ( ioctlを参照) の read を使用する小さなプログラムを作成し、読み取りを終了するたびに読み取りバイトをダンプすることです。

int nbr;
int i;
char buf[8];

nbr = 42;
while (nbr > 0)
{
  nbr = read(0, buf, 8);
  i = 0;
  while (i < nbr)
    printf("%x ", buf[i++]);
  printf("\n");
}

ctrl+key 受信シーケンスの 16 進バージョンが得られます。\ESC または \033 (エスケープ文字シーケンス) で始まる可能性があります。たとえば、上矢印キーは次のようになります\033[A

于 2012-03-01T13:19:38.413 に答える