10秒后运行代码或按键

时间:2012-12-13 14:05:19

标签: c++

我是c ++的初学者,我需要创建一个应用程序来打印一些东西10秒后或按下一个键后,我尝试了这个代码,但它不工作(按下一个键后它会打印& #34; a"很多而不是一个" a")

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

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

    cout<<"a";

}//while1

你能建议我更好的方法吗?

由于

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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显然退出了。