1

ここ数日でこの質問を数回しましたが、理解できません...基本的に、ユーザーが操作できる間、Beepコマンドのwhileループをバックグラウンドで実行したいと考えています利用可能なケース ステートメント (1 つだけが示されています..他にもあります)....私はブロックされ続け、ビープ音を鳴らしたいたびに、プログラムの残りの部分をブロックします...私はビープを使用する必要があるので、ドンしてください他の機能を提案しない..

ここにサンプルコードがあります...

while( keypress != 'q' || keypress != 'Q')
{   
    x = Beep(x);
    while (x == 1)
       Beep(350,300);

    alarm_t current;
    keypress = _getch();

    switch(keypress){

        case 'h':
            sprintf_s(current.message,"high alarm");
            current.timeOfEvent = time(NULL);
            recordEvent(current);
            break;

今...私の問題はwhileループとBeepコマンドにあります....これが私がBeep(x)に呼び出すものです

int Beep(int y)
{ 
    return y;
}

したがって、基本的には、現在の cpp ファイルの外部で関数を呼び出して、x と y を比較し、y を x と同等のものとして返そうとしています...これはブロックを回避できると思いましたが、そうではありません...

4

1 に答える 1

3

while ループのビープ音_getchは機能せず、ブロックされています。そのため、キャラクターが現れるまでブロックされます。

使用しているプラ​​ットフォームに応じて、次のようなものが必要ですkbhit(Google で検索すると、他のプラットフォームの代替が見つかります)。つまり、標準の C 機能ではなく、プラットフォーム固有のものです。

kbhit文字があるかどうかに応じて、true または false を返します。

したがって、次のことができます。

while(!key_is_quit(ch))
{
  Beep();
  if(kbhit())
  {
    ch = getch();
  // switch....
  }
}
于 2013-03-27T22:31:06.973 に答える