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. mvc route .html 后缀 404

    <system.webServer>    <validation validateIntegratedModeConfiguration="false" /&g ...

  2. Spring MVC学习step1——框架熟悉

    b站视频链接,整理的一些笔记,图是网上找到的黑马教案,侵权删,在此记录学习笔记 SpringMVC框架 步骤: 第一步:发起请求到前端控制器(Dispatcherservlet) 第二步:前端控制器请 ...

  3. js求最大值最小值

    比较数组中数值的大小是比较常见的操作,比较大小的方法有多种,比如可以使用自带的sort()函数,代码如下: <html> <head> <meta charset=&qu ...

  4. 解决Warning: mysql_connect(): Headers and client library minor version mismatch. 警告

    php -i|grep Client 查询当前Client 版本,结果如下: Client API version => 5.6.31Client API library version =&g ...

  5. 浅析HashMap的实现原理

    本文参照https://www.cnblogs.com/chengxiao/p/6059914.html#commentform作者的文章,并分享一些自己的体会. 本文将主要回答以下两个问题: 1. ...

  6. python 语法

    Python基础语法举例# 1 缩进和空格表示代码块# 2()连接多行print("()连接多行")str = ("uhfjfjkfj"       " ...

  7. ansible-play中for,if的使用

    #迭代循环的使用 #实现同时新建三个文件,同时部署三个服务 --- - host: websrvs remote_user: root task: - name: create some files ...

  8. 团队项目需求心得——慢阻肺疾病管理APP

    一.项目介绍: 先上图: 这是我们小组开发项目的系统构成图. 本项目研发面向家庭/社区,对稳定期中慢阻肺患者病情和环境全方位监测.简单病情趋势分析和患者行为干预,并且提供患者与家庭医生和专家沟通渠道的 ...

  9. springboot +redis配置

    springboot +redis配置 pom依赖 <dependency> <groupId>org.springframework.boot</groupId> ...

  10. python 对 sqlite3的简单使用

    SQLite是一种嵌入式数据库,它的数据库就是一个文件.由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以集成.Python就内 ...