一个关于键盘实时读入的问题

woshiaaaaaaa 2019-01-26 07:41:59
在调用conio.h中的kbhit和getch时,按道理不应该是实时从键盘读取状态吗,
可是在sleep期间如果接着输字符的话,仍然会被像缓冲区那样处理,
这个问题时sleep的问题还是getch的问题啊?
怎么才能做到在一段时间只能读一个字符呢?
附上代码:
#include<iostream>
#include<conio.h>
#include<stdlib.h>
#include<windows.h>
using namespace std;
int main()
{
char c;
while(1)
{
if(kbhit()!=0)
c=getch();
cout<<(int)c;
Sleep(1000);
system("cls");
}
return 0;
}
...全文
104 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2019-01-27
  • 打赏
  • 举报
回复
#include <conio.h>
#include <windows.h>
int main() {
int k;

while (1) {
if (kbhit()) {
k=getch();
if (0==k || 0xE0==k) k=k<<8|getch();
if (27==k) break;//按Esc键退出
cprintf("\r\n%04X\r\n",k);
}
Sleep(200);
cprintf(".");
}
return 0;
}

#include<iostream>
#include<conio.h>
#include<stdlib.h>
#include<windows.h>
using namespace std;
int main()
{
int c;
while(1)
{
if(kbhit()!=0) {
c=getch();
if (0==c || 0xE0==c) c=c<<8|getch();
if (27==c) break;//按Esc键退出
cout<<c;
while (kbhit()!=0) {
c=getch();
if (0==c || 0xE0==c) c=c<<8|getch();
}
}
Sleep(1000);
system("cls");
}
return 0;
}

如果还是满足不了你的需求,参考
GetKeyState
GetKeyboardState

棉猴 2019-01-27
  • 打赏
  • 举报
回复
while (1)
{
//if (kbhit() != 0)
c = getch();
cout << (int)c;
Sleep(1000);
while (kbhit()!=0) {//----使用while()语句把Sleep()期间所有的按键读取出来
getch();
};
system("cls");
}

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧