getch() 不回显的读入一个字符

头文件:<conio.h>
在输入密码时可以用getch()函数来达到不显示密码的效果

int main()
{
    char pwd[64] = { 0 };
    int index = 0;

    cout << "请输入密码:";
    while (1)
    {
        char c = _getch();
        if (c == '\r')
        {
            pwd[index] = '\0';
            break;
        }
        pwd[index++] = c;
        cout << '*';
    }
    cout << endl;

    if (!strcmp(pwd, "123456"))
    {
        cout << "密码正确" << endl;
    }
    else
    {
        cout << "密码错误" << endl;
    }

    return 0;
}

image

如果加上按退格,退格的ascii码是8

#include <iostream>
#include <string>
#include <conio.h>
using namespace std;

int main()
{
    string pwd;
    char c;
    cout << "密码:";

    while (1)
    {
        c = _getch();

        if (c == '\r')
        {
            break;
        }

        // 判断输入的是否是退格
        if (c == 8)  // 退格键的ascii码是8
        {
            if (pwd.length())
            {
                // substr 从字符串起始处的指定位置复制最多某个数目的字符的字符串
                pwd = pwd.substr(0, pwd.length() - 1);
                // \b代表退格,但是与按下退格键不一样,当前的光标会向前移动一位。 \b \b表示清除前面一个*
                cout << "\b \b";    
            }
        }
        else
        {
            pwd += c;
            cout << "*";
        }
    }
    cout << endl;

    cout << "你输入的密码是:" << pwd << endl;
    return 0;
}

image

posted @ 2022-04-13 04:16  荒年、  阅读(45)  评论(0编辑  收藏  举报