getch返回2个字符

问题描述

我正在尝试使用getch从用户那里获得角色。但是,它返回2个相同的字符。

Quaternion lookRotation = Quaternion.LookRotation(targetRb.veLocity);
lookRotation.z = 0;
lookRotation.x = 0;
camera.transform.rotation = Quaternion.Lerp(camera.transform.rotation,lookRotation,0.4f);

有人知道这个解决方法吗?

解决方法

在终端中键入字符时,它会回显。您看到的是回显的字符和printw()的结果。

在使用ncurses时,可以通过调用函数noecho()来轻松禁用回显。

常见做法是定义自己的函数来初始化诅咒,例如:

void init_curses()
    if (!initscr()) {
        exit(1);
    }
    noecho();
}
,

您将获得两个字符,因为最初输入处于缓冲模式。第二个字符是换行符。

请参阅manual page,它表示

要一次输入字符而不回显(大多数交互式, 面向屏幕的程序需要此),应遵循以下顺序 用过的:
initscr(); cbreak(); noecho();

您的示例可能是这样的:

#include <ncurses.h>
int main()
{
    initscr();
    cbreak(); // puts the terminal into unbuffered mode
    int input = getch();
    printw("%c",input);
    getch();  // actually needed for a different reason...
    endwin();
}

cbreak的手册页进行了说明

通常,tty驱动程序会缓冲输入的字符,直到换行符或 输入回车符。 cbreak 例程禁用行缓冲 和擦除/杀死字符处理(中断和流控制字符不受影响),使用户立即键入字符 该程序可用。 nocbreak 例程将终端返回到 正常(煮熟)模式。