为什么我的数组包含我从未添加的整数?C#

Pok*_*ace -2 c# arrays

  int gameTurns = 12;
        do
        {               
            gameTurns -= 1;
            Console.WriteLine("     You have " + (gameTurns) + " attempts left.");
            Console.WriteLine();            
            Console.WriteLine();

            string userEnteredPassword = "";
            Console.WriteLine("Enter a password of 4 digits ");
            userEnteredPassword = Console.ReadLine();

           for (int i = 0; i < numbersToGuess.Length; i++)
            {
                numbersFromPlayer[i] = Convert.ToInt16(userEnteredPassword[i]);                    
                Console.WriteLine(numbersFromPlayer[i]);
            }
Run Code Online (Sandbox Code Playgroud)

请注意,numbersToGuess声明如下:

 for (int i = 0; i <= 3; i++) 
        {
            numbersToGuess[i] = Convert.ToInt16(sequence.Next(9));
            Console.WriteLine(numbersToGuess[i]);
        }
Run Code Online (Sandbox Code Playgroud)

当我使用值1,2,3,4运行我的代码时,它打印:49,50,51,52.

Jon*_*eet 8

是的,因为49是字符'1'的UTF-16代码单元.

如果您输入"ABCD",它将显示64,65,66,67.

Convert.ToInt16(char) 记录为:

将指定的Unicode字符的值转换为等效的16位有符号整数.

如果你想转换每个字符使'0'变为0,'1'变为1等,你可以使用char.GetNumericValue(char):

numbersFromPlayer[i] = (short) char.GetNumericValue(userEnteredPassword[i]);
Run Code Online (Sandbox Code Playgroud)

或者,如果您乐意相信播放器输入ASCII数字:

numbersFromPlayer[i] = (short) (userEnteredPassword[i] - '0');
Run Code Online (Sandbox Code Playgroud)

  • 谢谢.我真的不知道为什么我总是下来投票而不是接受选民的指导,但你今天帮助了我:)也许我的问题会帮助其他人有同样的怀疑,但害怕要求害怕被人下投票 (5认同)