Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用getchar立即检索击键_C_Getchar - Fatal编程技术网

使用getchar立即检索击键

使用getchar立即检索击键,c,getchar,C,Getchar,我试图使用getchar()从键盘一次检索一个击键。尽管它这样做了,但我遇到的问题是它没有立即发送,它等待按下enter键,然后从缓冲区中一次读取1个字符 int main(){ char c = getchar(); putchar(c); return 0; } 当从键盘上按下每个按键时,我如何立即读取它? 谢谢您必须在原始模式下通过。 我从以下位置粘贴代码: #包括 #包括 无效模式_原始(int-activer) { 静态结构术语; 静态int raw_actif=

我试图使用getchar()从键盘一次检索一个击键。尽管它这样做了,但我遇到的问题是它没有立即发送,它等待按下enter键,然后从缓冲区中一次读取1个字符

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;
}