c++实现控制台密码登录功能(将用户输入实时转换为*)

上午有朋友让我帮忙实现一个功能:即在终端命令行中实现用户名密码登录。

这个小小的功能涉及了不少的知识点。

1)网上查了一些资料,conio.h这个库里有个getch函数,可以实现关闭输入缓冲区,直接从控制台读取输入字符。但我用的是mac,无法使用conio.h这个头文件。

2)mac端通过调用终端指令 system("stty -icanon") 也可以关闭输入缓冲区。

3)通过getchar()这个方法判断输入字符,直接将字符替换为'*'

这逻辑说起来简单,但对初学者来说实现起来可没那么容易. 这段代码我整整调试了一个多小时.

#include 
#include 
#include 

using namespace std;

int main(int argc, const char *argv[]){
    string pwd = "123456";//这是用来验证用户输入的密码,即正确的密码。
    char upwd[20];//用来存储用户输入的每一个字符。
    string username;
    cout << "请输入用户名: ";
    cin >> username;
    cout << "请输入密码:";
    int i = 0;
    char c;
    const char *ptr = upwd; //ptr指向upwd,这是为了将字符数组转换为string类型,方便验证输入是否正确
    int k = 0;
    while(((c=getchar())!=EOF) && i<20){
        if(c=='\n'){ //用户一共会输入2次回车,第一次是用户名之后,第二次是密码之后.只判断第2次的回车.
          ++k;
          cout << '\b';//这行代码是我调试半天后加上去的,用户输入用户名后有个回车也读进来了,把回车符删掉。
          if(k>1){
              string uupw(ptr);
              if(uupw == pwd){
                  cout << "系统登录成功!"<

 

你可能感兴趣的:(c++)