VS2017  C/C++输入密码显示*星号

_getch()函数使用时遇到的坑

参考: https://blog.csdn.net/guin_guo/article/details/46237905
 
想实现输入密码不回显的功能,找到了上面一篇文章。上面那篇文章中的代码在dev里跑没有出现任何问题。
当我拿到VS2017里的时候,首先遇到的是getch()不安全,无奈去查相关内容,改成安全的做法_getch(),又出现了....蜜汁问题
问题1:输入一个字符回显两个星号
问题2:debug发现只能读进一个字符后便跳出循环
 
此处略去一天的瞎改瞎试瞎搜...
 
虽然我实现出我想要的功能效果了,还是不太明白为什么要用两个while
 
 //以下代码可在VS2017跑通,亲测
 #include<iostream>
 #include<conio.h> //使用里面的_getch()
 #include<cstring>
 #include<cstdlib>
 using namespace std;

 int main()
 {
     ] = "password";
     ];//要输入的密码
     char ch;
     ;

     bool flg = false;

     while (true)
     {
         while (ch = _getch())
         {
             if (ch == '\r')
             {
                 flg = true;
                 break;
             }

             )//回撤是\b,ASCII码是8
             {//不是回撤就录入
                 s[i] = ch;
                 putchar('*');//输出星号
                 i++;
             }
             else
             {
                 putchar('\b');//回撤一个字符
                 putchar(' ');//显示空格掩盖
                 putchar('\b');//再回撤一格等待录入
                 i--;
             }
         }

         if (flg)
             break;

     }
     cout << endl;
     s[i] = '\0';
     cout << "密码:" << s << endl;

     )
         cout << "correct!" << endl;
     else
         cout << "wrong!" << endl;
     system("pause");
     ;
 }

PS:

关于getch(),getche(),getchar()函数,网上的解释已经非常清楚了就不再赘述。

VS2017 C/C++输入密码显示*星号的更多相关文章

  1. C#代码实现在控制台输入密码显示星号

    在控制台输入的内容C#默认按照字符串进行处理,如果直接让用户一次输入完毕就很难实现 显示星号的功能.但是如果让用户一次只能输入一个字符就,在将用户输入的字符替换为星号就可以实现了! 首先,C#中能让用 ...

  2. 一个只能用在Win下的密码验证函数(显示星号,可删除)

    以前做小程序时图好玩在网上找的代码.输入的密码会以星号显示出来,并且输入错了可以删除.因为用了专有库函数,所以只能在Windows平台使用,少用为好,不过可能还有点用.嗯…就这样了 #include ...

  3. c语言一个显示星号的函数(隐藏密码)

    显示星号 void star(char p[])    //显示星号 {     int j; while((p[j] = getch())!='\r') { if(p[j] !='\b') { pr ...

  4. IDEA修改显示星号*和热部署

    IDEA修改显示*星号: IDEA热部署: 两步: 1. 2. Ctrl+Alt+Shift+/ 打开下面界面,选Registry 对于Springboot应用,可能无法启动,在上述两步不起作用的情况 ...

  5. C语言:模拟密码输入显示星号

    一个安全的程序在用户输入密码时不应该显示密码本身,而应该回显星号或者点号,例如······或******,这在网页.PC软件.ATM机.POS机上经常看到.但是C语言没有提供类似的功能,控制台上只能原 ...

  6. c++输入密码以星号代替

    #include <iostream> #include <string>//注意这里的头文件! #include<conio.h> using namespace ...

  7. VS2017 Debug断点后显示UTF8字符串

    断点后跟踪字幕文件文本,因为国内字幕一般是UTF8的,VS默认显示不出来,在变量上双击,加入 ,s8就可以了 默认 修改后 其他 ,数字  将变量拆分为数组显示, 数字是要显示多少位, 此法对cons ...

  8. Python之控制台输入密码的方法

    一.raw_input()或input(): for python 2.x [root@master test]# /usr/local/python2.7/bin/python test.py Pl ...

  9. java窗口程序初学组件小总结

    容器(可以放组件)JPanel默认的布局管理器是FlowLayout:JPanel panel=new JPanel(); 按钮JButton(可以为汉字 也可以是图片):JButton button ...

随机推荐

  1. vmware克隆虚拟机后进行网络配置

    1.首先将虚拟机网络模式选为NAT模式 2.点击高级,查看MAC地址 然后编辑:/etc/udev/rules.d/70-persistent-net.rules 其中teh是网卡的名称,每一次克隆新 ...

  2. JQuery案例一:实现表格隔行换色

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  3. python中的unique()

    a = np.unique(A) 对于一维数组或者列表,unique函数去除其中重复的元素,并按元素由大到小返回一个新的无元素重复的元组或者列表 import numpy as np A = [1, ...

  4. redisi应用--布隆过滤器

    但是如果我们想知道某一个值是不是已经在 HyperLogLog 结构里面了,它就无能为力了,它只提供了 pfadd 和 pfcount 方法,没有提供 pfcontains 这种方法.

  5. Java 平时作业七

    以下是几本计算机书籍的基本信息 编号  书名         价格      出版社 1  JAVA 基础   32   清华大学出版社 2  JAVA WEB 开发  40   电子工业出版社 3  ...

  6. css中width:auto和width:100%的区别是什么

    width的值一般是这样设置的: 1,width:50px://宽度设为50px 2,width:50%://宽度设为父类宽度的50% 3,还有一个值是auto(默认值),宽度是自动的,随着内容的增加 ...

  7. Linux上的10个Touch命令实例

    Linux Touch 命令 Touch命令可以用来修改文件访问或修改的时间戳.实际上,它更常仅仅用于快速的创建一个空白文件. 这篇文章展示了一些非常简单和快速的实例,使用Touch命令来修改时间戳和 ...

  8. 预先封装数据的思路.md

    预先封装数据的思路.md python3 最近有两位同学开发开发了用程序在线竞猜数字的小游戏,可以通过以下两个网址去玩: bbaa的游戏 http://bbaass.tk/math/ codetige ...

  9. python3读取sqlyog配置文件中的MySql密码

    这个人有什么目的?: 我多多少少听过一些安全圈的大牛说到类似的思路,大意是可以通过扫描各种程序和服务的配置文件(比如SVN的文件,RSYNC的配置文件等), 从中发现敏感信息,从而找到入侵的突破口.沿 ...

  10. NIO 概述 与 通信实例

    NIO 简述: NIO是在jdk1.4之后加入的一种基于缓冲区(buffer)和通道(channel)的I/O方式, nio是同步非阻塞的i/o模式,同步是指线程不断地轮询i/o事件,非阻塞是在处理i ...