微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

getch返回2个字符

如何解决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 例程将终端返回到 正常(煮熟)模式。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。