使用getchar立即检索击键
我试图使用getchar()从键盘一次检索一个击键。尽管它这样做了,但我遇到的问题是它没有立即发送,它等待按下enter键,然后从缓冲区中一次读取1个字符使用getchar立即检索击键,c,getchar,C,Getchar,我试图使用getchar()从键盘一次检索一个击键。尽管它这样做了,但我遇到的问题是它没有立即发送,它等待按下enter键,然后从缓冲区中一次读取1个字符 int main(){ char c = getchar(); putchar(c); return 0; } 当从键盘上按下每个按键时,我如何立即读取它? 谢谢您必须在原始模式下通过。 我从以下位置粘贴代码: #包括 #包括 无效模式_原始(int-activer) { 静态结构术语; 静态int raw_actif=
int main(){
char c = getchar();
putchar(c);
return 0;
}
当从键盘上按下每个按键时,我如何立即读取它?
谢谢您必须在原始模式下通过。 我从以下位置粘贴代码:
#包括
#包括
无效模式_原始(int-activer)
{
静态结构术语;
静态int raw_actif=0;
如果(原始活动==activer)
返回;
if(activer)
{
结构termios raw;
tcgetattr(标准文件号和熟的);
生=熟;
cfmakeraw(&raw);
tcsetattr(标准文件号、TCSANOW和原始文件);
}
其他的
tcsetattr(标准文件号、TCSANOW和熟的);
原始激活=激活器;
}
之后,您不需要点击回车键
编辑:
正如Emmet所说,这是Unix版本,取决于环境。您可以使用getch()函数,它在conio.h中定义
请注意,getch()的使用并没有在控制台上显示字符。
如果希望查看输入,可以使用putch()、putchar()、printf()等函数
e、 g
#包括
int main()
{
char c=getch();
putch(c);//对于输入不是必需的,让我们看看您的输入。
返回0;
}
不幸的是,这个问题的答案是特定于平台的。在*nix上,您必须将终端置于“原始模式”或使用一个为您执行此操作的库。使用curses
中的getch()
可能更容易。这是特定于平台的(起源于黑暗时代DOS上的Borland C)。我认为没有平台独立的解决方案。在Linux上,如果您安装了libncurses dev
(或类似的,取决于发行版)包,则可以在curses.h
(链接-lncurses
)中使用类似的getch()
。嗨,Alex,我使用的是OSX,似乎没有conio.h文件。请尝试安装ncurses
#include <termios.h>
#include <unistd.h>
void mode_raw(int activer)
{
static struct termios cooked;
static int raw_actif = 0;
if (raw_actif == activer)
return;
if (activer)
{
struct termios raw;
tcgetattr(STDIN_FILENO, &cooked);
raw = cooked;
cfmakeraw(&raw);
tcsetattr(STDIN_FILENO, TCSANOW, &raw);
}
else
tcsetattr(STDIN_FILENO, TCSANOW, &cooked);
raw_actif = activer;
#include <conio.h>
int main()
{
char c = getch();
putch(c); //isn't necessary for the input, Let's you see your input.
return 0;
}