我正在使用C。
创建一个Linux终端程序我正在尝试将两位数代码地址设为数组位置。 我不想在每两位输入后按Enter键,我希望输入只是在输入字符后直接通过scanf发送到我的缓冲区变量。
我没有代码示例,因为我不知道如何处理它。
感谢您的帮助!
答案 0 :(得分:1)
你有两个选择,以几乎相同的方式解决同样的问题。第一种是在运行程序时使用stdbuf
;调用是:
stdbuf -i0 ./a.out
使用它可以防止stdin
进行行缓冲,并允许您使用fread()
或类似命令来检索输入。
另一种方法是将终端设置为 raw 模式。这是很好描述的here。但缺点是控制字符不再处理。在你的程序中,你
#include <termios.h>
main(){
struct termios trm;
tcgetattr(STDIN_FILENO, &trm); /* get the current settings */
trm.c_cc[VMIN] = 1; /* return after 1 byte read; you might make this a 2*/
trm.c_cc[VTIME] = 0; /* block forever until 1 byte is read */
tcsetattr(STDIN_FILENO, TCSANOW, &trm);
}