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

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

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

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

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

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

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

#include <iostream>
#include <string>
#include <stdlib.h>

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 << "系统登录成功!"<<endl;
              } else {
                  cout << "用户名密码错误,系统退出。"<<endl;
              }
              break;
          }
        } else {
            //坑吃半天,就为了下面这4行代码,将用户的输入保存在upwd中,输入一个删掉一个,其中'\b'是回退符.
            upwd[i] = c;
            cout << '\b';
            cout << '*';
            i++;
        }
      }
      return 0;
}

 

  • 4
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值