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. sed 命令总结

    sed是Stream Editor的缩写,是操作.过滤.转换文本内容的强大工具,对文件实现增删改查 主要参数 -n 取消默认输出 -i 修改保存文件 内置命令字符 a,append追加 d,delet ...

  2. C++对象模型复习

    本文写于2017-02-24,从老账号迁移到本账号,原文地址:https://i.cnblogs.com/EditPosts.aspx?postid=6440685 一:对象模型 C++面向对象的实现 ...

  3. 简要log4j配置

    若排版紊乱可查看我的个人博客原文地址 1. 配置效果 下面的log4j日志配置最终能达到的效果是对于全局日志可以根据级别输入到对应级别的日志文件中,注意低级别的日志文件会同时包含高级别的日志信息,例如 ...

  4. 拷贝一张图片,从一个目录到另外一个目录下(PS:是拷贝是不是移动)

    package com.lanxi.demo2_6; import java.io.File; import java.io.FileInputStream; import java.io.FileN ...

  5. 【转】forbids in-class initialization of non-const static member不能在类内初始化非const static成员

    转自:forbids in-class initialization of non-const static member不能在类内初始化非const static成员 今天写程序,出现一个新错误,好 ...

  6. PAT A1020

    PAT A1020 标签(空格分隔): PAT #include <cstdio> #include <queue> using namespace std; const in ...

  7. 使用 navicat 导入导出数据库

    1.使用 navicat 导出数据库 2.使用 navicat 导入数据库导入之前需要先建好数据库 3.可以直接使用navicat 到数据传输功能直接将一个数库copy到另一个数据库

  8. ListBox多列显示,原来比较简单

    数据库的表中,如果有多个列要现实,而对应的是ListBox控件,一般情况下,ListBox是单列显示的, 例如 ListBox1.DataSource = dbcenter.accessGetData ...

  9. day04 list tuple

    一. 上节课内容回顾 字符串 由', ", ''', """括起来的内容是字符串 字符:单一文字符号. 字符串: 把字符连成串(有顺序的) 索引和切片 s[st ...

  10. 东芝L10安装Centos5.5

    为什么安装5.5:因为高版本的需要PAE设定但是老电脑不支持,偶又不想重新编译内核,so... 1.  安装之前需要把电脑格式化(我是整机安装Linux),否则会报not enough space l ...