我永远不会记得我是怎么做的,因为它对我来说很少见.但是在C或C++中,从标准输入读取字符而不等待换行符的最佳方法是什么(按回车键).
理想情况下,它也不会将输入字符回显到屏幕上.我只想捕捉击键而不影响控制台屏幕.
我正在编写一个类似于shell的程序.启动后,会出现提示并输入一些特定于应用程序的命令.
到目前为止这个工作正常.但是,我想在Bash中添加对命令历史记录的支持,因此用户可以点击向上或向下箭头并查看以前输入的命令.
我已经包含了ncurses库,我用getch()做了一个简单的hello world测试,以确保正确报告向上和向下箭头.
困扰我的是,似乎要求我调用initscr()来清除屏幕以便我使用getch().
好的,问题是:
有没有人知道如何使用ncurses getch()函数而不先调用initscr()?如果没有,我可以让它不清楚屏幕吗?基本上,我希望getch()的行为与getchar()相同,如果这有意义的话.
提前致谢!
编辑:我认为最好的例子是Python如何在交互模式下运行.
我正在学习用C语言编程,并且希望能够在我的代码运行时能够在没有按下的情况下在终端中键入字符return.我的程序有效,但是当我打电话时initscr(),屏幕被清除 - 即使在通话后也是如此filter().该文档filter建议它应该禁用清除 - 但对我来说情况并非如此.
#include <stdio.h>
#include <curses.h>
#include <term.h>
int main(void) {
int ch;
filter();
initscr();
cbreak();
noecho();
keypad(stdscr, TRUE);
while((ch = getch()) != EOF);
endwin();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么上面的代码仍然清晰的屏幕,以及可以做些什么来解决它?
如果有帮助,我正在使用Debian Lenny(稳定版)和gnome-terminal.
我会使用ncurses,但希望它在Windows上运行。在C ++中,我可以使用conio kbhit()和getch()从conio来首先检查是否按下了字符,然后再获取它。
我想要在Rust中也有类似的东西。
如你所知,在Windows中使用getch()时,应用程序会等到你按下一个键,
如何在不冻结程序的情况下读取密钥,例如:
void main(){
char c;
while(1){
printf("hello\n");
if (c=getch()) {
.
.
.
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢.