2011-09-11 42 views
1

我想在C#中做一個簡單的應用程序,其中我輸入的每個字符都顯示在控制檯窗口中。這裏是我的代碼:在C#中的Console.ReadKey(false)有點可疑

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提前!

+1

input.ToString()不會做你認爲它確實如此,用調試器很容易看到的東西。檢查此代碼的答案,向您展示如何使用KeyChar屬性:http://stackoverflow.com/questions/4804968/how-can-i-validate-console-input-as-integers/4805314#4805314 –

回答

3

因爲input.ToString() == "System.ConsoleKeyInfo" :-) 根據您想要做什麼,請嘗試編寫input.KeyChar

+0

...它有一個包含實際字符的屬性。 – bzlm

+0

@bzlm無KeyChar是帶鍵的字符。所以如果你按'A',它會是'A'。如果你按下'F1',它將是''\ 0'',你必須查看Key屬性才能看到被按下的鍵 – xanatos

0

改爲嘗試char c = input.KeyChar;

4

你們看到的是這樣的:

  • 您輸入的原始字符,因爲你通過falsetrueReadKey
  • 字符串「System.ConsoleKeyInfo」的第一個字符,因爲ToString()方法返回typename(這裏),而不是輸入的字符。

使用下面的代碼,而不是達到你嘗試什麼:

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

的問題是,你在一個System.ConsoleKeyInfo使用ToString()。當它變成一個字符串時,你將得到"System.ConsoleKeyInfo",因此第一個字符是'S'。你的意思是寫下面的代碼嗎?

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

與該代碼的每個字符會得到重複的(所以你會得到aabbccddee)。將false更改爲true,並在ReadKey中解決該問題。

1

Console.ReadKey(false);的參數定義了您輸入的密鑰是否被攔截。因此,Console.ReadKey(false);將打印您鍵入的字符,並且Console.Writeline(c)將打印S