C 如何在不按enter end键的情况下获取输入而不查看屏幕上的输入?
我想创建一个简单的游戏,其中一个对象在屏幕上移动“WASD”。问题是,C 如何在不按enter end键的情况下获取输入而不查看屏幕上的输入?,c,linux,terminal,C,Linux,Terminal,我想创建一个简单的游戏,其中一个对象在屏幕上移动“WASD”。问题是,getchar不按enter键就可以工作,但如果不在屏幕上显示它,它不会接受输入。我怎样才能解决它 PS:程序是用C语言编写的,在Linux终端上 //my code: while(1){ input = getchar(); if(input == 'a'){/*do something*/} if(input == 'd'){/*do something*/} //... } 由于您在Li
getchar
不按enter键就可以工作,但如果不在屏幕上显示它,它不会接受输入。我怎样才能解决它
PS:程序是用C语言编写的,在Linux终端上
//my code:
while(1){
input = getchar();
if(input == 'a'){/*do something*/}
if(input == 'd'){/*do something*/}
//...
}
由于您在Linux上,因此可以使用
termios.h
,这里是对旧getch
(conio.h
)的模拟:
#包括
#包括
#包括
#包括
#包括
静态结构术语,oterm;
静态int getch(void)
{
int c=0;
tcgetattr(0,&oterm);
memcpy(&term,&oterm,sizeof(term));
term.c|lflag&=~(ICANON | ECHO);
术语c_cc[VMIN]=1;
term.c_cc[VTIME]=0;
tcsetattr(0、TCSANOW和term);
c=getchar();
tcsetattr(0、TCSANOW和oterm);
返回c;
}
内部主(空)
{
puts(“按Q退出”);
而(1){
int c=getch();
开关(c)
{
案例“A”:
案例“a”:
看跌期权(“A被按下”);
打破
案例“D”:
案例“d”:
看跌期权(“D被按下”);
打破
/* ...*/
案例‘Q’:
案例‘q’:
退出(退出成功);
违约:
打破
}
}
返回0;
}
阅读ncurses
(,),或者可能没有通用的便携方式。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <termios.h>
#include <unistd.h>
static struct termios term, oterm;
static int getch(void)
{
int c = 0;
tcgetattr(0, &oterm);
memcpy(&term, &oterm, sizeof(term));
term.c_lflag &= ~(ICANON | ECHO);
term.c_cc[VMIN] = 1;
term.c_cc[VTIME] = 0;
tcsetattr(0, TCSANOW, &term);
c = getchar();
tcsetattr(0, TCSANOW, &oterm);
return c;
}
int main(void)
{
puts("Press Q to exit");
while (1) {
int c = getch();
switch (c)
{
case 'A':
case 'a':
puts("A was pressed");
break;
case 'D':
case 'd':
puts("D was pressed");
break;
/* ...*/
case 'Q':
case 'q':
exit(EXIT_SUCCESS);
default:
break;
}
}
return 0;
}