IoveBC 发表于 2013-3-7 14:18:38

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

需要达到请输入密码:*********
这样的效果;目前为止我学会了以下方式(先不管大小写)
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拼成字符串,这样就能够获得之前输入的密码串了,我写了一个简单的代码,可以参考一下
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);
            }            
            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();
额,这样子还是不行的啊。。。
请看图片,为什么输出之后是这样的东西呢?有没有其他的办法?

hebutyll 发表于 2013-3-8 09:32:56

IoveBC 发表于 2013-3-7 22:33 static/image/common/back.gif
string s ="";
            List temp = new List();//定义一个系统临时变量string类型的temp
         ...

我把上面的程序简单的修改了一下,现在是这么处理的,输进去的字符用*显示出来,当按回车键的时候代表结束,然后再下一行显示输入的字符串。不过没有对其他的特殊按键,比如标点,ctrl等进行处理,如果需要处理的话,和判断回车类似
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);
            }            
            Console.WriteLine(sb.ToString());
            Console.ReadKey();

hebutyll 发表于 2013-3-8 09:35:02

IoveBC 发表于 2013-3-7 22:33 static/image/common/back.gif
string s ="";
            List temp = new List();//定义一个系统临时变量string类型的temp
         ...

对了,如果需要进行回复的话,请点我回复下面的有个回复的连接,这样你给我的回复才能提示给我,如果直接在下面的回复框里面写回复,只是给帖子的,我这边是不会有提示的

IoveBC 发表于 2013-3-9 00:30:19

hebutyll 发表于 2013-3-8 09:35 static/image/common/back.gif
对了,如果需要进行回复的话,请点我回复下面的有个回复的连接,这样你给我的回复才能提示给我,如果直接 ...

哦,这样的话是涉及到了按键的代码是吧,难道其他的代码都是conoleKey.________什么的吗?

IoveBC 发表于 2013-3-9 19:40:05

IoveBC 发表于 2013-3-9 00:30 static/image/common/back.gif
哦,这样的话是涉及到了按键的代码是吧,难道其他的代码都是conoleKey.________什么的吗?

谢谢啊,暂时没有发现什么问题了。。。。。

IoveBC 发表于 2013-3-9 21:19:51

IoveBC 发表于 2013-3-9 00:30 static/image/common/back.gif
哦,这样的话是涉及到了按键的代码是吧,难道其他的代码都是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中,
                可适用于,不适用于直接
                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

谢谢分享!!!
页: [1] 2
查看完整版本: C#控制台字符输入隐藏问题!