一个关于getchar()的三行简单C代码的疑问,在linux下如何解决
发布网友
发布时间:2023-08-04 10:36
我来回答
共3个回答
热心网友
时间:2024-02-05 05:28
getchar的机理是这样的:当键盘敲入回车时,才将之前键盘输入的字符输入到缓冲区,然后getchar依次读取缓冲区字符,直到回车符。
在linux下,想要直接把按键值输入到缓冲区,则使用(stty raw)命令设置终端位RAW模式即可:system( "stty raw -echo ");
不知道你明白了没~~
唉 都这么晚了 该睡觉了~
热心网友
时间:2024-02-05 05:28
把终端配置成立即检查输入并返回(MIN = 0, TIME = 0),退出前记得恢复。
#include <stdio.h>
#include <termios.h>
int main()
{
int ch = 0;
struct termios initial_settings, new_settings;
tcgetattr(0, &initial_settings);
new_settings = initial_settings;
new_settings.c_lflag &= ~ICANON; //使用非授权模式
new_settings.c_cc[VMIN] = 0; //立即检查输入并返回
new_settings.c_cc[VTIME] = 0;
tcsetattr(0, TCSANOW, &new_settings);
while(ch != 'q')
{
if(read(0, &ch, 1) == 1)
{
printf("got a char\n");
}
}
tcsetattr(0, TCSANOW, &initial_settings);
return 0;
}
热心网友
时间:2024-02-05 05:29
如果把getchar换成getch的话,有你要的一部分效果,但是输入的字符不回显。