【发布时间】:2023-08-25 01:53:01
【问题描述】:
我一直试图让getch 在另一个程序中工作,但没有成功。所以我制作了最基本的程序,我可以使用getch,按照我希望它在主程序中的工作方式。
我研究过noecho、cbreak、initscr和nodelay的需求,我也尝试过使用newscr()但没有成功。
我遇到的问题是,在我点击“输入”之前,字符不会被打印到屏幕上,而每个循环它们应该是put 到屏幕上。为什么会这样?此外,光标不会在新行返回到屏幕左侧。例如。
abc
def
ghi
我一直在寻找答案,但又被难住了......
#include <stdio.h>
#include <ncurses.h>
int main()
{
initscr();cbreak(); noecho();nodelay(stdscr,0);
char c ;
while((c=getch())!=EOF){
putchar(c);}
return 0;
}
【问题讨论】:
-
如果您想知道我为什么要这样做,我正在尝试从标准输入获取输入,并且只打印到非空的标准输出行。
-
如果你只是想实现一个文本过滤器,那么通过curses引入终端控制是一个非常糟糕的主意。交互式字符一次输入与过滤掉空行的问题无关。
-
要将非空行从标准输入复制到标准输出,请尝试
grep '.'。我可以向你保证,它不使用 ncurses。 -
@Kaz;我已经使用重定向的标准输入文件成功地使用了一次字符过滤,但是当仅将它与标准输入一起使用时,终端会回显我不想要的标准输入。所以这就是为什么我要尝试终端控制
-
顺便说一句,你应该把
getch()读成int,而不是char。 *.com/questions/8464030/…