
各个把键盘键入的字符输出来的就是stty的输入回写功能,包括退格等字符处理,都是stty处理掉的。键盘给电脑的只有按键消息。怎么修复无回显的问题?在终端输入以下命令再回车即可。
为了避免之前有字符影响,可以先回车一下。执行后,回显就有了。
实现getch函数,直接调用即可:#include <stdio.h>
#include <unistd.h>
#include <termios.h>
typedef enum {FALSE, TRUE} bool
static struct termios newtermset, oldtermset
void noecho(void)
{
tcgetattr(STDIN_FILENO, &oldtermset)
newtermset = oldtermset
newtermset.c_lflag &= ~ICANON
newtermset.c_lflag &= ~ECHO
newtermset.c_cc[VMIN] = 1
tcsetattr(STDIN_FILENO, TCSANOW, &newtermset)
}
void reset_term(void)
{
tcsetattr(STDIN_FILENO, TCSANOW, &oldtermset)
}
int getch(void)
{
int ch
noecho()
ch = getchar()
reset_term()
return ch
}
int main(int argc, char **argv)
{
char buff[128]
int i, ch
bool bshow = FALSE
if (argc >1) bshow = TRUE
printf("Please input your name: ")
for (i = 0i <sizeof(buff)++i) {
if ('\n' == (ch = getch()))
break
if (bshow) putchar('*')
buff[i] = ch
}
buff[i] = '\0'
printf("\nYour name is: %s\n", buff)
return 0
}
建议:若只是想使用getch函数来实现无回显输入功能,就不要用ncurses了,因为你得用它的话必须要进入curses环境,而在此环境中,很多C标准输入/输出函数都会运行得不正常!
上面这个程序其实就是对终端编程,具体可自行查阅相关方面内容。
PS:上面程序知道怎么编译和运行吧。Good Luck。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)