马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#技术求助 ASP.NET技术求助

【源码下载】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接外包项目】 面试-葵花宝典下载

官方一群:

官方二群:

C#控制台字符输入隐藏问题!

  [复制链接]
查看12901 | 回复10 | 2013-3-7 14:18:38 | 显示全部楼层 |阅读模式
需要达到请输入密码:*********
这样的效果;目前为止我学会了以下方式(先不管大小写)
for(int i=0;i<10;i++)
{
   string password=console.readkey(true).key.ToString;
   console.Write("*");
}
这样的方式是可以达到我想要的效果(输入隐藏)
但问题是如何对我所输入的密码经行判断呢?
(if(password==“123456789”)类似的方式是不管用的!我知道字符串的判断!)
问各位大神是否可以让我输入的是char类型的显示*号的代码!
或者说各位大神帮忙修改一下我这个代码如何实现输入*号且能够判断!
求教!谢谢!
hebutyll | 2013-3-7 16:31:33 | 显示全部楼层
这是我暂时想到的办法,你可以添加一个List的临时变量,每次输入一个字符就把这个字符存到list里面,再输入结束之后,再把List拼成字符串,这样就能够获得之前输入的密码串了,我写了一个简单的代码,可以参考一下
[C#] 纯文本查看 复制代码
List<string> temp = new List<string>();
            for (int i = 0; i < 10; i++)
            {
                string password = Console.ReadKey(true).Key.ToString();
                temp.Add(password);
                Console.Write("*");
            }
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < temp.Count; i++)
            {
                sb.Append(temp[i]);
            }            
            Console.Write(sb.ToString());
IoveBC | 2013-3-7 22:33:56 | 显示全部楼层
string s ="";
            List<string> temp = new List<string>();  //定义一个系统临时变量string类型的temp
            for (int i = 0; i < 10;i++ )
            {
                s = Console.ReadKey(true).Key.ToString();//使输入不显示在屏幕上
                temp.Add(s);
                Console.Write("*");

            }
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < temp.Count; i++)
            {
                sb.Append(temp);
            }
            Console.Write(sb.ToString());
            Console.ReadLine();

额,这样子还是不行的啊。。。
请看图片,为什么输出之后是这样的东西呢?有没有其他的办法?
QQ截图20130307223137.png
hebutyll | 2013-3-8 09:32:56 | 显示全部楼层
IoveBC 发表于 2013-3-7 22:33
string s ="";
            List temp = new List();  //定义一个系统临时变量string类型的temp
         ...

我把上面的程序简单的修改了一下,现在是这么处理的,输进去的字符用*显示出来,当按回车键的时候代表结束,然后再下一行显示输入的字符串。不过没有对其他的特殊按键,比如标点,ctrl等进行处理,如果需要处理的话,和判断回车类似
[C#] 纯文本查看 复制代码
List<string> temp = new List<string>();
            while(true)
            {
                var key = Console.ReadKey(true);
                string password = key.KeyChar.ToString();
                if (key.Key == ConsoleKey.Enter)
                {
                    break;
                }
                Console.Write("*");
                temp.Add(password);
            }
            Console.Write("\n");
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < temp.Count; i++)
            {
                sb.Append(temp[i]);
            }            
            Console.WriteLine(sb.ToString());
            Console.ReadKey();
hebutyll | 2013-3-8 09:35:02 | 显示全部楼层
IoveBC 发表于 2013-3-7 22:33
string s ="";
            List temp = new List();  //定义一个系统临时变量string类型的temp
         ...

对了,如果需要进行回复的话,请点我回复下面的有个回复的连接,这样你给我的回复才能提示给我,如果直接在下面的回复框里面写回复,只是给帖子的,我这边是不会有提示的
IoveBC | 2013-3-9 00:30:19 | 显示全部楼层
hebutyll 发表于 2013-3-8 09:35
对了,如果需要进行回复的话,请点我回复下面的有个回复的连接,这样你给我的回复才能提示给我,如果直接 ...

哦,这样的话是涉及到了按键的代码是吧,难道其他的代码都是conoleKey.________什么的吗?
IoveBC | 2013-3-9 19:40:05 | 显示全部楼层
IoveBC 发表于 2013-3-9 00:30
哦,这样的话是涉及到了按键的代码是吧,难道其他的代码都是conoleKey.________什么的吗?

谢谢啊,暂时没有发现什么问题了。。。。。
IoveBC | 2013-3-9 21:19:51 | 显示全部楼层
IoveBC 发表于 2013-3-9 00:30
哦,这样的话是涉及到了按键的代码是吧,难道其他的代码都是conoleKey.________什么的吗?

/// <summary>
        /// 字符串输入隐藏问题!
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            Console.Write("请输入您的密码:");
            //Random num = new Random();
            //int number = num.Next(100);
            //Console.Write(number);//随机数代码
            List<string> temp = new List<string>(); //定义临时系统变量
            while (true)
            {
                var key = Console.ReadKey(true);    //定义按键的变量key
                string password = key.KeyChar.ToString();  
                if (key.Key == ConsoleKey.Enter)    //按回车结束输入
                    break;
                if (key.Key == ConsoleKey.Escape)   //按Esc退出程序
                    return;
                Console.Write("*");                //密码以*号显示
                temp.Add(password);               
                /*把输入的字符串类型的passwoed添加到系统临时string类型的temp中,
                可适用于[list<string> strname=new List<string>()],不适用于直接
                string的类型*/
            }
            Console.Write("\n您的密码是:");
            for (int i = 0; i < temp.Count; i++)
            {
                Console.Write(temp);               
            }
            StringBuilder outpassword = new StringBuilder(); //StringBuilder表示可变的字符串类型
            for (int i = 0; i < temp.Count; i++)
            {
                outpassword.Append(temp);      
                //把存起来的密码一起放在outpassword中,该Append只适用于可变字符串类型StringBuilder
            }
            Console.Write("\n您的密码是:");
            Console.WriteLine(outpassword);
            Console.Write("您的密码是:");
            Console.WriteLine(outpassword.ToString()); //outpassword.ToString()是隐形转换,输出outpassword的字符串的形式
            if (outpassword.Equals("123456789"))
            {
                Console.Write("恭喜你,登陆成功!");
            }
            else
                Console.WriteLine("Sorry!登陆失败,你的密码输入有误!");
            Console.ReadKey();
        }
继续啊,这个问题还是没有解决啊,这个是无法判断的!我的代码是没有错误的,但是在后面用于判断密码的时候输入的是我的判断密码是否正确的时候无论怎么样都是是错误的!
IoveBC | 2013-3-11 21:52:37 | 显示全部楼层
哦,我知道了。。。。。谢谢啊
chao2332601 | 2013-6-16 01:35:00 | 显示全部楼层
谢谢分享!!!
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则