【问题标题】:How to use `getch` function of c in Linux?如何在Linux中使用c的`getch`功能?
【发布时间】:2017-07-31 10:47:38
【问题描述】:

我在 Linux mint 中安装了 ncurses 库,但我仍然无法在 中使用 getch 函数。我正在使用 Linux mint 18.2。

这是我的程序:

#include <stdio.h>
#include <curses.h>

int main() {
    char k;
    printf("how are you");

    k = getch();
    printf("%c",k);
}

这是输出:

 ram@ram$ gcc-7 test.c -lcurses
 ram@ram$ ./a.out 
 how are you�ram@ram$

它不会等待我按下任何键并快速终止。我不想为 Linux 安装 conio.h。如何在 Linux 中使用 getchgetche 函数?请不要告诉我做我自己的功能。我还是菜鸟。或者必须有替代品。

【问题讨论】:

  • getch() 仅在初始化 curses 后定义了行为。谷歌至少initscr()endwin()
  • 顺便说一句,您不能将stdio 函数与curses 函数混合使用。
  • 更重要的是:为什么?你想达到什么目的?从当前的问题陈述来看,您似乎不需要任何 ncurses。那么?
  • 也许你想改用getchar()

标签: c c linux ncurses getch


【解决方案1】:

这是一个“更正”的版本,解释了 cmets 中的问题:

#include <curses.h>
#include <stdio.h>

int main(void)
{
    // use the correct type, see https://linux.die.net/man/3/getch
    int k;

    // init curses:
    initscr();

    // in curses, you have to use curses functions for all terminal I/O
    addstr("How are you?");

    k = getch();

    // end curses:
    endwin();

    printf("You entered %c\n", k);

    return 0;
}

这仍然不是很好的代码,您至少应该检查您是否从getch() 获得了有效字符。

同样重要的是要注意getch() 不是“C 的函数”。它是curses 的一部分,这是一个著名的独立于平台的控制台/终端控制 API,具有例如实现。对于 *nix 系统 (ncurses) 和 Windows (pdcurses)。它不是语言 C 的一部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 2017-09-21
    • 1970-01-01
    • 2017-06-28
    相关资源
    最近更新 更多