C++ 调整终端大小时的Getch()行为?(课程)
当我调整终端大小时,getch返回410。为什么getch将resize解释为输入?410是什么?它是一个特殊的符号吗 代码:C++ 调整终端大小时的Getch()行为?(课程),c++,ncurses,C++,Ncurses,当我调整终端大小时,getch返回410。为什么getch将resize解释为输入?410是什么?它是一个特殊的符号吗 代码: #包括 int main(){ initscr();cbreak();noecho(); int x=getch(); printw(“%d”,x); getch(); endwin(); 返回0; } 但是当我使用timeout时,我会得到ERR(即-1)。为什么使用超时时调整大小会导致错误 代码: #包括 int main(){ initscr();cbreak(
#包括
int main(){
initscr();cbreak();noecho();
int x=getch();
printw(“%d”,x);
getch();
endwin();
返回0;
}
但是当我使用timeout时,我会得到ERR(即-1)。为什么使用超时时调整大小会导致错误
代码:
#包括
int main(){
initscr();cbreak();noecho();超时(10000);
int x=getch();
printw(“%d”,x);
getch();
endwin();
返回0;
}
/*诅咒.h*/
#定义键_RESIZE 0632/*端子调整大小事件*/
410=0632(八进制)
至于你的第二个问题,当我在我的机器上测试时,这不会发生。您是否正在运行旧版本的ncurses?这里面有很多漏洞 使用时(在本例中为10秒),将在超时过期时返回ERR
。手册页面中有:
超时
和wtimeout
例程设置块读或非块读
给定的窗口。如果延迟为负,则使用阻塞读取(即。,
无限期等待输入)。如果延迟为零,则为非阻塞
使用read(即,如果没有等待的输入,read返回ERR)。如果延迟
为正,然后读取延迟毫秒的块,并返回ERR
如果仍然没有输入。因此,这些例程提供相同的功能
功能如nodelay
,以及能够
仅阻塞延迟毫秒(其中延迟为正)
及
如果窗口指针为空或超时,则返回错误
在没有任何数据的情况下过期,或者如果执行被信号中断(errno将设置为EINTR
)
如果您有耐心(或测试缓慢),您将看到a-1返回。如果让程序等待,则更容易:
#include <curses.h>
int main() {
initscr(); cbreak(); noecho(); timeout(10000);
for (;;) {
int x = getch();
move(0,0);
printw("%d", x);
getch();
clrtobot();
}
endwin();
return 0;
}
#包括
int main(){
initscr();cbreak();noecho();超时(10000);
对于(;;){
int x=getch();
移动(0,0);
printw(“%d”,x);
getch();
clrtobot();
}
endwin();
返回0;
}
这是通常的情况。如果您看到的是不同的内容,那么相关信息(课程版本和平台)应该是问题的一部分。我假设他们从“为什么使用超时时调整大小会导致错误?”的问题中得到-1而不是调整大小,但是是的,如果他们达到了超时,那么应该得到-1。
#include <curses.h>
int main() {
initscr(); cbreak(); noecho(); timeout(10000);
int x = getch();
printw("%d", x);
getch();
endwin();
return 0;
}
#include <curses.h>
int main() {
initscr(); cbreak(); noecho(); timeout(10000);
for (;;) {
int x = getch();
move(0,0);
printw("%d", x);
getch();
clrtobot();
}
endwin();
return 0;
}