关于Linux终端回显问题

来源:互联网 发布:金蝶软件 编辑:程序博客网 时间:2024/06/03 14:30

我们都知道,在Linux中:
char a[10] = {0};
scanf(”%s”, a);
在终端控制台上输入的字符串(或者字符)都会在终端显示出来,那么当我们想输入密码时(并不想被别人看见)该怎么办呢?
(可以退格重新输入密码哦)
这里写图片描述

/***************************************************************

File Name: mima.c
Author: 浮生流年
Function List: main() 主函数
Created Time: 2017年12月12日 星期二 13时37分13秒
**************************************************************/

#include <stdio.h>#include <termios.h>#include <unistd.h>int mygetch(){    struct termios oldt, newt;    int ch;    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;}
int getpasswd(char *passwd, int size){    int c, n = 0;    do    {        c = mygetch();        if (c != '\n' && c != 'r' && c != 127)        {            passwd[n] = c;            printf("*");            n++;        }        else if ((c != '\n' | c != '\r') && c == 127)//判断是否是回车或则退格        {            if (n > 0)            {                n--;                printf("\b \b");//输出退格            }        }    }while (c != '\n' && c != '\r' && n < (size - 1));    passwd[n] = '\0';//消除一个多余的回车    return n;}
int main(){    char passWord[20];    printf("请输入密码:\n");    getpasswd(passWord, 20);    printf("\n");    printf("你输入的密码是:%s\n", passWord);    return 0;}