c - Linux 中的 getch() 和 getche() 等价于什么?

我在 Linux 中找不到 conio.h 的等效头文件。

getche() & getche() 在 Linux 中有没有选项?

我想制作一个 switch case 基本菜单,用户只需按一个键就可以给出他的选项,并且进程应该向前移动。我不想让用户在按下他的选择后按下 ENTER。

最佳答案

#include <termios.h>
#include <stdio.h>

static struct termios old, current;

/* Initialize new terminal i/o settings */
void initTermios(int echo) 
{
  tcgetattr(0, &old); /* grab old terminal i/o settings */
  current = old; /* make new settings same as old settings */
  current.c_lflag &= ~ICANON; /* disable buffered i/o */
  if (echo) {
      current.c_lflag |= ECHO; /* set echo mode */
  } else {
      current.c_lflag &= ~ECHO; /* set no echo mode */
  }
  tcsetattr(0, TCSANOW, &current); /* use these new terminal i/o settings now */
}

/* Restore old terminal i/o settings */
void resetTermios(void) 
{
  tcsetattr(0, TCSANOW, &old);
}

/* Read 1 character - echo defines echo mode */
char getch_(int echo) 
{
  char ch;
  initTermios(echo);
  ch = getchar();
  resetTermios();
  return ch;
}

/* Read 1 character without echo */
char getch(void) 
{
  return getch_(0);
}

/* Read 1 character with echo */
char getche(void) 
{
  return getch_(1);
}

/* Let's test it out */
int main(void) {
  char c;
  printf("(getche example) please type a letter: ");
  c = getche();
  printf("\nYou typed: %c\n", c);
  printf("(getch example) please type a letter...");
  c = getch();
  printf("\nYou typed: %c\n", c);
  return 0;
}

输出:

(getche example) please type a letter: g
You typed: g
(getch example) please type a letter...
You typed: g

https://stackoverflow.com/questions/7469139/

相关文章:

python - Django FileField with upload_to 在运行时确定

linux - objdump 如何发出 intel 语法

python - 如何在 Python 中创建嵌套字典?

python - 在 Python 中查找数字的所有因数的最有效方法是什么?

c - Linux共享内存: shmget() vs mmap()?

python - 使用 python 和 BeautifulSoup 从网页中检索链接

python - 如何在 python jinja 模板中输出 loop.counter?

linux - 为什么 find 命令的 -exec 选项需要反斜杠和分号?

linux - 什么是抢占/什么是可抢占内核?到底有什么好处呢?

c - 如何检测当前进程是否正在由 GDB 运行