2011-09-11 3 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'と入力して 'a'の代わりに 'aS'を得る。どんな解決策ですか?事前に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

あなたが見ていることは以下の通りです:

  • あなたが入力した元の文字、あなたがToString()以来、falseないtrueReadKey
  • 文字列「System.ConsoleKeyInfo」の最初の文字を渡さので、メソッドは、入力された文字ではなく、typename(ここ)を返します。

あなたが試みたものを達成する代わりに、次のコードを使用します

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

問題は、あなたがSystem.ConsoleKeyInfoToString()を使用していることです。これを文字列にすると"System.ConsoleKeyInfo"となり、最初の文字は'S'となります。代わりに次のコードを書くことを意味しましたか?

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

このコードを使用すると、各文字が重複します(aabbccddeeが得られます)。 falsetrueに変更してReadKeyに修正してください。

1

Console.ReadKey(false);のパラメータは、入力したキーが傍受されるかどうかを定義します。したがって、Console.ReadKey(false);は入力した文字を表示し、Console.Writeline(c)Sを表示します。

関連する問題