WINDOW *win = initscr();//必须有,会新建一个屏幕,如果没这句下面noecho会段错误,还不知道怎么实现在当前屏幕输入
noecho();
raw();
printf("Enter decode key:");
fflush(stdout);
char pwds[33];
int i;
for(i=0;i<32;i++){
pwds[i] = getchar();
if(pwds[i]=='\r' || pwds[i]=='\n')
break;
printf("*");
fflush(stdout);
}
pwds[i] = 0;
//printf("\n");
echo();
noraw();
endwin();//没这句会导致后面程序的的输出出现问题
setvbuf(stdout,NULL,_IONBF,0);//没这句,会导致后面的输出即使有\n也不会立即回显
增加一个支持backspace删除的版本:
WINDOW *win = initscr();
noecho();
raw();
//fflush(stdin);
printf("Enter decode key: ");
fflush(stdout);
char pwds[33];
int i=0,j;
while(i<32){
pwds[i] = getchar();
if(pwds[i]=='\r' || pwds[i]=='\n')
break;
if(pwds[i]==127){
if(i>0)
i--;
endwin();
wrefresh(win);
printf("Enter decode key: ");
for(j=0;j<i;j++){
printf("*");
}
}else{
i++;
printf("*");
}
fflush(stdout);
}
pwds[i] = 0;
//printf("\n");
echo();
noraw();
endwin();
setvbuf(stdout,NULL,_IONBF,0);