还有 noecho()这个函数,也是包含在
Linux C程序 输入无回显问题
答案:3 悬赏:40 手机版
解决时间 2021-04-10 06:05
- 提问者网友:凉末
- 2021-04-10 01:55
想做一个键盘输入不回显的C程序,在网上搜了半天,说用getch()这个函数,可是有的人又说,getch()不是标准的C里面的,不能在Linux中用,要用别的方法实现类似的功能,貌似还挺复杂。我在我的Linux RD 5中 #man getch,却说有这个函数,包含在 里面,但是 我在用的时候,又报错,说“undefined reference to 'stascr' “undefined reference to 'stascr' ”,这两个是什么东东啊! 我根本都没用到这两个函数。我彻底晕了。
还有 noecho()这个函数,也是包含在里面的,我明明包含了这个头文件,但是在引用后,编译器也报错说 这个函数没有定义,郁闷啊!!
还有 noecho()这个函数,也是包含在
最佳答案
- 五星知识达人网友:夜余生
- 2021-04-10 02:01
是在学c还是学dos,如果是想无GUI开发c的话,建议装个linux,用vi编辑代码,gcc编译,gdb调试.
关于Turbo C也可以用款叫WinTC的windows软件.
学C的话,强烈建议用Source Insight写代码和看代码!
关于Turbo C也可以用款叫WinTC的windows软件.
学C的话,强烈建议用Source Insight写代码和看代码!
全部回答
- 1楼网友:玩世
- 2021-04-10 03:49
无回显输入
noecho();
参考例子;
#include;
#include;
#include;
#include;
static struct termios stored_settings1;
static struct termios stored_settings2;
void echo_off(void)
{
struct termios new_settings;
tcgetattr(0,&stored_settings1);
new_settings =stored_settings1;
new_settings.c_lflag &= (~echo);
tcsetattr(0,tcsanow,&new_settings);
return;
}
void echo_on(void)
{
tcsetattr(0,tcsanow,&stored_settings1);
return;
}
void set_keypress(void)
{
struct termios new_settings;
tcgetattr(0,&stored_settings2);
new_settings = stored_settings2;
new_settings.c_lflag&=(~icanon);
new_settings.c_cc[vtime] = 0;
new_settings.c_cc[vmin] = 1;
tcsetattr(0, tcsanow, &new_settings);
return;
}
void reset_keypress(void)
{
tcsetattr(0, tcsanow, &stored_settings2);
return;
}
int main()
{
printf("========================\n");
printf("0. main menu\n");
printf("1. chapter one\n");
printf("2. chapter two\n");
printf("3. chapter three\n");
printf("========================\n");
echo_off();
set_keypress();
char ch;
while((ch = getchar() ) != 'q')
{
switch(ch)
{
case '0':
printf("in main menu.\n");break;
case '1':
printf("entering chapter one\n");break;
case '2':
printf("entering chapter two\n");break;
case '3':
printf("entering chapter three\n");break;
default:
printf("entering other chapter.\n");
}
}
reset_keypress();
echo_on();
return 0;
}
- 2楼网友:青灯有味
- 2021-04-10 02:16
实现getch函数,直接调用即可:
#include
#include
#include
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 = 0; i < 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。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯