2012-03-01 7 views
0

の入力テストは、あなたのようなchar配列に保存された入力をテストすることができるだろうかと思いまして...C - CTRL +文字

char input[INPUT_SIZE]; 

とTO

fgets(input,INPUT_SIZE,stdin); 

を使用してユーザーからの入力を取得しますが、ユーザーの入力がたとえば入力されているかどうかをテストするif文を使用する方法が不思議でした ctrl + dまたは任意のctrl + anykey?

私はこのようにそこascci値を使用しようと試み

.. CTRL dに対してテストする例である

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

結果はchar配列aswellです。

+0

のように見えますが、「EOT」はCtrl-DのASCII値ではありません(あなたは4を探しています)。あなたの例はコンパイルされません、または少なくとも警告を出します。 –

+0

私は結果= 4のためにそれをテストすべきですか? – LmC

+2

'if(result = 'EOT')'の行は、C言語で非常に多くの点で間違っています。 – AusCBloke

答えて

0

あなたはEOFを返すあなたの読み取りとしてのみテストCtrlキー + D、これに関する詳細情報を持っているあなたの読み取りのマニュアルを参照することができますが、一般的に、それは同じことがCCtrlキー + のために行く0を返します。両方があなたのプログラムにシグナルを送信しているからです。

Ctrl +キーの組み合わせは、システムによって大きく異なります。シェルやemacsでのlinux Ctrlキーで

+ はCtrl +電子は、先頭や、それぞれの行の末尾/先頭にあなたを移動します。

あなたが望むものを得るのが最も簡単なのは、8バイトのバッファを使って、バッファなしのバッファ(ioctlを参照)を使用して小さなプログラムを作成し、読み込みを終了するたびに読み込みバイトをダンプすることです。

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 +キー受信シーケンスの六角バージョンを持っています。 \ ESCまたは\ 033(エスケープ文字シーケンス)で始まる可能性があります。例えば、矢印アップキーは\033[A