C程序:键盘无法识别使用getch()输入

时间:2014-12-10 01:57:07

标签: c enter getch

所以我试图用'*'屏蔽我的密码。 到目前为止,这个代码适用于退格和所有。然而,当我点击进入时,它根本不做任何事情,因此,我无法继续使用该程序。

这是我到目前为止所做的:

    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。但是,它仍然没有做任何事情。键盘仍然无法识别输入键。它什么都不做。

如果我将所有||替换为&&,它将立即退出该计划。

2 个答案:

答案 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){