C#中的Console.ReadKey(false)有点狡猾

时间:2011-09-11 16:03:54

标签: c#

我正在尝试在C#中创建一个简单的应用程序,其中我键入的每个字符都显示在控制台窗口中。这是我的代码:

class Program {
    static void Main(string[] args) {
        while (true) {
            System.ConsoleKeyInfo input;
            input = Console.ReadKey(false);
            String d = input.ToString();
            char c = d[0];
            Console.WriteLine(c);
        }
    }
}

问题是角色没有正确显示,更准确地说,每个角色后跟一个'S'。例如,我键入'a',然后我得到'aS'而不是'a'。有解决方案吗Thnx提前!

5 个答案:

答案 0 :(得分:4)

您所看到的是以下内容:

  • 您输入的原始字符,因为您已将false而不是true传递给ReadKey
  • 字符串“System.ConsoleKeyInfo”的第一个字符,因为ToString()方法返回的是typename(此处),而不是输入的字符。

使用以下代码来实现您的目标:

while(true)
{
    ConsoleKeyInfo info = Console.ReadKey(true);
    Console.WriteLine(info.KeyChar);
}

答案 1 :(得分:3)

因为input.ToString() == "System.ConsoleKeyInfo" :-) 根据您的要求,尝试编写input.KeyChar

答案 2 :(得分:1)

Console.ReadKey(false);的参数定义您键入的密钥是否被截获。因此Console.ReadKey(false);会打印您输入的字符,而Console.Writeline(c)会打印S

答案 3 :(得分:0)

请尝试char c = input.KeyChar;

答案 4 :(得分:0)

问题是您在ToString()上使用System.ConsoleKeyInfo。当它变为字符串时,您将获得"System.ConsoleKeyInfo",因此第一个字符为'S'。您的意思是编写以下代码吗?

while (true)
{
    var input = Console.ReadKey(false);
    Console.WriteLine(input.KeyChar);
}

使用该代码,每个角色都会重复(因此您将获得aabbccddee)。将false更改为true中的ReadKey以解决此问题。