我是c ++的初学者,我需要创建一个应用程序来打印一些东西10秒后或按下一个键后,我尝试了这个代码,但它不工作(按下一个键后它会打印& #34; a"很多而不是一个" a")
int i;
while(1)
{
i=1;
while(!kbhit()||i<1000)
{
Sleep(10);
i++;
}
cout<<"a";
}//while1
你能建议我更好的方法吗?
由于
答案 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显然退出了。