1

私はC++の初心者です。10秒後またはキーを押した後に何かを印刷するアプリケーションを作成する必要があります。このコードを試しましたが、機能しません(キーを押した後、「a」をたくさん印刷します。 1つの「a」の代わりに)

int i;
while(1)
{
    i=1;

    while(!kbhit()||i<1000)
    {
        Sleep(10);
        i++;
    }

    cout<<"a";

}//while1

もっと良い方法を提案してもらえますか?

ありがとう

4

2 に答える 2

1

問題は、バッファから押された最初のキーを取得しないことです...

int i;
while(1)
{
    i = 0;
    while(!kbhit() && ++i<1000)
    {
        Sleep(10);
    }

    if (kbhit()) getch(); // to get the key out of the buffer, otherwise kbhit will keep getting true.
    cout<<"a";

}//while1
于 2012-12-13T14:11:28.020 に答える
0

まず第一に、キーを押したかどうかに関係なく、コードが 10 秒間スリープするという最大の問題があります。これが私の提案です。

#include <ctime>
#include <conio>
#include <iostream>
using namespace std;

inline int getTime()
{
    return static_cast<int>(static_cast<double>(clock())/CLOCKS_PER_SEC);
}

int main()
{
    int i = 1;
    int time, totaltime;

    cout << "hit q to quit\n";
    while(1)
    {
        i=1;
        totaltime = getTime();
        time = getTime() - totaltime;
        while(!_kbhit()&&time<5)
        {
            i++;
            time = getTime() - totaltime;
        }

        if (kbhit()) { 
            if(_getch() == 'q') return 0; cout << "you hit a key - hit q to quit\n"; 
        }
        else cout<<"you waited - hit q to quit\n";
    }

    return 0;
 }

そのコードが実際に行うことは、コードの時間を測定することです... 5 秒に達すると、待機していると表示されます。q 以外のキーを押すと、それが表示されます。q は明らかに終了します。

于 2012-12-13T14:55:22.300 に答える