C++ 调整终端大小时的Getch()行为?(课程)

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(

当我调整终端大小时,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();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;

}