键盘获取字符串linux c,如何通过从键盘获取任何值来打破Linux上的C循环?

Linux键盘输入是缓冲的,为了捕获动态命中的密钥,您必须配置TERM IO.

在main()顶部附近添加一个调用(参见下面的代码)

term_nonblocking();

读取即时按下的键,而不等待回车(CR).

码:

struct termios stdin_orig; // Structure to save parameters

void term_reset() {

tcsetattr(STDIN_FILENO,TCSANOW,&stdin_orig);

tcsetattr(STDIN_FILENO,TCSAFLUSH,&stdin_orig);

}

void term_nonblocking() {

struct termios newt;

tcgetattr(STDIN_FILENO,&stdin_orig);

fcntl(STDIN_FILENO,F_SETFL,O_NONBLOCK); // non-blocking

newt = stdin_orig;

newt.c_lflag &= ~(ICANON | ECHO);

tcsetattr(STDIN_FILENO,&newt);

atexit(term_reset);

}

注意:当程序退出时,将自动调用term_reset()(重置终端参数).

您可以在程序中的任何位置调用现在非阻塞的getchar()来检测按键

int i = getchar();

并检查是否按下了某个键:

if (i > 0) {

// key was pressed,code in `i`

}

在您的程序中,例如:

int key = 0;

while (... && key <= 0) {

// ...

key = getchar();

}

注意:如果您希望输出无缓冲,请调用setbuf(stdout,NULL);

(来自@stacey的注释:当没有密钥可用时,getchar()可能返回0或-1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值