我们在学校有一个项目,编排排球 - 比赛作为控制台应用程序。 我们应该为团队和得分等进行输入输出,并将键绑定到Team1-score + 1,Team2-score-1等。这很好。我们使用getch()来绑定这些键。 我的问题:如果你举例如按R和R是Team1-score + 1并按住此键,它将继续添加得分+ 1,我们应该停止,所以你需要再次按R如果你想要添加另一个点。 我没有找到任何解决方案! 谁能举个例子来解决它? 我是编码新手,所以我没经验。 谢谢你的帮助! 编辑:我使用的是Windows 10,这是我代码的重要部分:
while (true)
{
_kbhit();
char L = _getch();
if (L == 114)
{
score1 = score1 + 1;
}
else if (L == 99)
{
score1 = score1 - 1;
}
else if (L == 117)
{
score2 = score2 + 1;
}
else if (L == 110)
{
score2 = score2 - 1;
}
else if (L == 113)
{
L ==“number”是按钮r,u,c,n,q的ascii代码
答案 0 :(得分:2)
getch()
在stdio
上运行,实际上只是从/进入/进入操作系统的字节流。它没有“按键/释放”的概念。当您按住某个键时,操作系统将开始自动重复按下该字符。为了使你的用例更糟糕,如果你按下一个键,然后按另一个键,第一个键的重复将停止。
现在有 方式获取原始密钥down / up事件,但这些涉及OS特定的编程接口;你没有告诉我们你正在使用哪种操作系统,所以这里有点猜测。在控制台中做你想做的事情有点可能,但使用起来很尴尬。对于Windows,请参阅C++ console keyboard events,对于Linux,请参阅Receiving key press and key release events in Linux terminal applications?
但是我强烈建议你甚至不要尝试自己实现所有操作系统级别的关键事件,而是使用跨平台库,它提供了一个框架,可以完全按照你想要的那样做。如今最广泛使用的框架之一是SDL http://libsdl.org/ - 它会将你从控制台中移出(当涉及到游戏时:很好的摆脱,除非你正在进行类似胭脂的游戏)。
答案 1 :(得分:0)
如果您正在使用控制台,则在按下某个键之后,大多数操作系统将等待一秒钟,然后再次按下该键。您现在可以尝试:按键盘上的键,看看响应是什么。
确保有人不小心按两次键是操作系统需要处理的问题,因为否则每个接受键盘输入的应用程序都需要编写自己的问题解决方案。
如果你想要比操作系统更进一步,你可以在你的程序中使用计时器与计时器库,并等待n秒再允许输入再次注册。