所以我试图用'*'
屏蔽我的密码。
到目前为止,这个代码适用于退格和所有。然而,当我点击进入时,它根本不做任何事情,因此,我无法继续使用该程序。
这是我到目前为止所做的:
printf("Password:");
fflush(stdout);
while((ch=mygetch()) != EOF || ch != 13 || z<sizeof(password)-1){
if(ch==127 && z>0){
printf("\b \b"); fflush(stdout);
z--; password[z] = '\0';
}
else if(isalnum(ch)){
putchar('*');
password[z++] = (char)ch;
}
}
password[z] = '\0';
printf("password: %s", password);
我已经在此功能上定义了mygetch:
int mygetch(){
int ch;
struct termios oldt, newt;
tcgetattr (STDIN_FILENO, &oldt);
newt=oldt;
newt.c_lflag &= ~(ICANON | ECHO);
tcsetattr (STDIN_FILENO, TCSANOW, &newt);
ch = getchar();
tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
return ch;
}
我尝试在if-statement
内置if(ch==13) break;
,它会打破while-loop
。但是,它仍然没有做任何事情。键盘仍然无法识别输入键。它什么都不做。
如果我将所有||
替换为&&
,它将立即退出该计划。
答案 0 :(得分:1)
似乎新行被假定为CR(= 13)。但它可以是LF(= 10)。请尝试在while循环中再添加一个条件:
while((ch=mygetch()) != EOF || ch != 10 || ch != 13 || z<sizeof(password)-1) {
答案 1 :(得分:0)
使用&&
,然后添加LF条件
while((ch=mygetch()) != EOF && ch != 13 && ch != 10 && z<sizeof(password)-1){