2016-11-02 4 views
-2

私の問題は、ユーザーが端末で集計を押しているときに特別なことをしたいということです。私の最初のコードは次のように説明しています:getline()で可能なので、_getch()でkeyboards関数を使用する方法?

char buffer[100]; 

while (true) 
{ 
    std::cin.getline(buffer, 100); // do IMMEDIATELY something if 'tabulation' was used ? 

} 

私はどのようにすべての文字をチェックするのか尋ねましたか?私は試しました_getch();

while (true) 
{ 
    c = _getch(); 

    if (c == '\t') 
     // do something special 
    else 
     std::cout << (char)c; 
} 

しかし、今、私は私ができるように私はgetline()で入力しています何に矢印でキーを機能、デル、SUPPR、等...私はできません移動任意のスペシャルを使用することはできません

getline()の途中で特別な中断を行う方法はありますか? _getch()を別の方法で使用することはできますか? 私はまた、他のスレッドを(1つはgetline()と、もう1つは_getch()としてみましたが)スレッドで何ができるのか分かりません。

すべての特別な機能(矢印キー、del、supprなど)を '手動で'処理することは可能ですが、別の解決策を探しています。

+0

いいえ、標準C++にはありません。それはOSと端末特有のものです。 –

+0

stdinまたはscanfを使用してみませんか? – Gugg

+1

'_getch'が返すことができる値を説明しているドキュメントの部分を読んだことがありますか?単一のキーコードを得るために '_getch'を2回呼び出す必要があるかもしれないことに気づいていますか? –

答えて

0

は、Microsoft Cランタイムライブラリから_getch()機能を意味すると仮定:

_getchと関数は、文字をエコーせずに コンソールから単一の文字を読み_getwch 。これらの機能のどれも を使用してCTRL + Cを読み取ることはできません。ファンクションキーまたは矢印キーを読むときは、それぞれ ファンクションを2回呼び出す必要があります。最初の呼び出しでは0または0xE0が返され、 では2番目の呼び出しで実際のキーコードが返されます。だから、

_getch() 0を返すか、0xE0となって(224)のいずれかの場合は、特定のキーが押されたかを確認するために、再度を機能を呼び出す必要があります。

(10進数)は以下のように、少なくとも私のマシン上で、これらの「拡張」文字コードは次のとおり

  • 0 59 = F1
  • 0 60 = F2
  • 0 61 = F3
  • 0 62 = F4
  • 0 63 = F5
  • 0 64 = F6
  • 0 65 = F7
  • 0 66 = F8
  • 0 67 = F9
  • 0 68 = F10
  • 224 71 =ホーム
  • 224 72 = ↑(上矢印)
  • 224 73 =ページアップ
  • 224 75 = ←(左矢印)
  • 224 77 = →(右矢印)
  • 224 79 =エンド
  • 224 80 = ↓(下矢印)
  • 224 81 = Page Downキー
  • 224 82 =挿入
  • 224 83 =
  • 224 133 = F11
  • 224 134 = F12
削除

となります。SetConsoleCursorPositionとそれに関連するコンソールAPI関数をご覧ください。

関連する問題