我无法在Linux中找到conio.h的等效头文件.
在Linux中有getch()
&getche()
function功能吗?
我想制作一个开关盒基本菜单,用户只需按一个键即可提供选项,并且应该向前移动过程.按下他的选择后,我不想让用户按ENTER键.
我是Python的新手,我只是用Python创建了一个游戏和一个菜单.问题是,使用(raw_)input()要求我在每次按键后按Enter键,我想按下向下箭头将立即选择下一个菜单项,或者在游戏中向下移动.目前,它需要我喜欢键入"向下"然后按Enter键.我也做了很多研究,但我不想下载大型模块(例如pygame)来实现单个keyDown()方法.那么有什么更简单的方法,我找不到?
编辑:
刚刚发现可以解决这个问题msvcrt.getch()
.它不是keyDown(),但它有效.但是,我不知道如何使用它,这看起来很奇怪,这里有什么帮助吗?这就是我现在所得到的:
from msvcrt import getch
while True:
key = getch()
print(key)
Run Code Online (Sandbox Code Playgroud)
但是,它一直给我所有这些无意义的字节,例如,向下箭头是这样的:
b'\xe0'
b'P'
Run Code Online (Sandbox Code Playgroud)
我不知道如何使用它们,我试图与chr()进行比较,甚至使用ord(),但不能真正进行任何比较.我想要做的基本上是这样的:
from msvcrt import getch
while True:
key = getch()
if key == escape:
break
elif key == downarrow:
movedown()
elif key == 'a':
...
Run Code Online (Sandbox Code Playgroud)
等等......有什么帮助吗?
我正在编写一个getch()
用于扫描箭头键的程序.到目前为止我的代码是:
switch(getch()) {
case 65: // key up
break;
case 66: // key down
break;
case 67: // key right
break;
case 68: // key left
break;
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我按下'A'
,'B'
,'C'
或'D'
代码也将执行,因为65
是十进制代码'A'
,等等.
有没有办法检查箭头键而不打电话给别人?
谢谢!
如何在不按Enter键的情况下从终端获取单个键盘字符?我试过了Curses::getch
,但这对我没用.
我在使用ncurses的getch()来阻止时遇到了一些问题.默认操作似乎是非阻塞的(或者我错过了一些初始化)?我希望它像Windows中的getch()一样工作.我试过各种版本的
timeout(3000000);
nocbreak();
cbreak();
noraw();
etc...
Run Code Online (Sandbox Code Playgroud)
(不是所有的同时).WINDOW
如果可能的话,我宁愿不(明确地)使用任何.一个while
围绕残培环路(),检查特定的返回值是OK了.
在TurboC++中,我可以使用getch()
函数conio.h
.但是在Linux中,gcc没有提供conio.h
.我怎样才能获得功能getch()
?
我试图在PyCharm中从控制台读取一个字符(不按回车键),但无济于事.函数会msvcrt.getch()
停止代码,但不会对按键(甚至输入)作出反应,并且msvcrt.kbhit()
始终返回0.例如,此代码不会打印任何内容:
import msvcrt
while 1:
if msvcrt.kbhit():
print 'reading'
print 'done'
Run Code Online (Sandbox Code Playgroud)
我使用的是Windows 7,PyCharm 3.4(闲置时也是如此).
怎么了?有没有其他方法可以在没有输入的情况下读取输入?
我正在使用getch()
,我的应用程序立即崩溃.包括做什么时:
int main()
{
getch();
}
Run Code Online (Sandbox Code Playgroud)
我找不到链接,但据说问题是它需要关闭缓冲或这些线路上的一些奇怪的东西,我仍然希望cout
与跨平台代码一起工作.
我被告知要使用std::cin.get()
,但我希望应用程序在按下某个键时退出,而不是当用户输入一个字母或数字然后按回车键退出时.
这有什么功能吗?代码必须在Mac(我的操作系统)和Windows下运行.
链接/编译不是问题 ; 我<curses.h>
使用时-lcurses
在XCode中包含并链接<conio.h>
.
int main(int argc, char *argv[], char *env[])
{
printf("Press any key to exit.\n");
getch();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
根据手册页,
getch
应该等到按下任何键
...但实际上它在按任意键之前直接返回.(返回的值是-1
).
为什么?
更新
我在Linux上.Press any key to exit.
如果不使用,我该如何实施getch()
?
getchar()
只有在按Enter后才会返回,这不是我想要的.
当按下某个键时,如何退出无限循环?目前我正在使用getch,但它会尽快开始阻止我的循环,因为没有更多的输入要读取.