6

これは非常に単純な質問だと思いますが、単純な答えを見つけることができません。、 などの無限ループがありwhile(1)for(;;)キーを押すとループから抜け出す必要があります。これを行う最も簡単な方法は何ですか?

PS: getchcin.ignore、またはは使用できませんcin.get。ループが停止するためです。

4

4 に答える 4

3

さて、あなたが望むのは非同期入力です。cinwait for enterによって提供されるすべてのメソッド。そのためには、システム固有の関数を使用するか、それを行うライブラリを使用する必要があります。

必要なことは、while ループでロジックを処理するだけでなく、OS からのメッセージ パイプをリッスンすることです。それについてさらに情報が必要な場合は、コメントを残してください。

編集:別の方法が1つありますが、移植できない可能性があるため、お勧めしません。次のコードは、VS2012RC でコンパイルおよび実行されます。

#include<iostream>
#include<conio.h>

using namespace std;

int main()
{
   cout << "Enter a character";
   getch();
}
于 2012-08-16T13:04:50.020 に答える
3

kbhit()以下は、無限ループを使用する Windows コンソール コードです。ただし、キーボードがヒットすると、ループが中断されて終了します。持っている場合は<conio.h>、これを試してください:

#include <iostream> 
#include <conio.h>

using namespace std;


int main()
{


   while (1)
   { 
     if (kbhit()) break;

   }

  return 0;
}
于 2012-08-16T13:35:42.167 に答える
2

C++には「キーボード」はありません。不透明な入力データストリームしかなく、端末には独自のキーボード入力がときどき入力されます。これはほとんどの場合、バッファリングされた編集可能な行単位の入力であるため、特定のキーがいつ押されたかを知る方法はありません。

下位レベルの端末と直接通信するには、プラットフォーム固有の方法が必要です。そのようなライブラリの1つは、かなり広く普及していて移植性がncursesあります(互換性のあるWindowsバリアントが存在します)。SDLやAllegroなどのポータブルグラフィカルアプリケーションフレームワークも、生のキーボード処理を提供します。

于 2012-08-16T13:08:35.680 に答える
0

これは、「左矢印」が押されているかどうかを確認します。

GetKeyState(VK_LEFT)

また、これは何も待ちません。いくつかのフラグをチェックするだけです。

winuser.h で定義されているその他のキー:

#define VK_NUMPAD0        0x60
#define VK_NUMPAD1        0x61
#define VK_NUMPAD2        0x62
#define VK_NUMPAD3        0x63
#define VK_NUMPAD4        0x64
#define VK_NUMPAD5        0x65
#define VK_NUMPAD6        0x66
#define VK_NUMPAD7        0x67
#define VK_NUMPAD8        0x68
#define VK_NUMPAD9        0x69

#define VK_CLEAR          0x0C
#define VK_RETURN         0x0D

#define VK_SHIFT          0x10
#define VK_CONTROL        0x11
#define VK_MENU           0x12
#define VK_PAUSE          0x13
#define VK_CAPITAL        0x14

#define VK_KANA           0x15
#define VK_HANGEUL        0x15  /* old name - should be here for compatibility */
#define VK_HANGUL         0x15
#define VK_JUNJA          0x17
#define VK_FINAL          0x18
#define VK_HANJA          0x19
#define VK_KANJI          0x19

#define VK_ESCAPE         0x1B

#define VK_CONVERT        0x1C
#define VK_NONCONVERT     0x1D
#define VK_ACCEPT         0x1E
#define VK_MODECHANGE     0x1F

#define VK_SPACE          0x20
#define VK_PRIOR          0x21
#define VK_NEXT           0x22
#define VK_END            0x23
#define VK_HOME           0x24
#define VK_LEFT           0x25
#define VK_UP             0x26
#define VK_RIGHT          0x27
#define VK_DOWN           0x28
#define VK_SELECT         0x29
#define VK_PRINT          0x2A
#define VK_EXECUTE        0x2B
#define VK_SNAPSHOT       0x2C
#define VK_INSERT         0x2D
#define VK_DELETE         0x2E
#define VK_HELP           0x2F

winuser.h を windows.h に含める必要があります

于 2012-08-16T13:16:14.347 に答える