1

これは初心者向けの質問です。英語が下手でごめんなさい。

これがプログラムです:

using System;
public class BoolTest 
{
    static void Main() 
    {
        Console.Write("Enter a character: "); 
        char c = (char)Console.Read();
        if (Char.IsLetter(c))
        {
            if (Char.IsLower(c))
            {
                Console.WriteLine("The character is lowercase.");
            }
            else
            {
                Console.WriteLine("The character is uppercase.");
            }
        }
        else
        {
            Console.WriteLine("Not an alphabetic character.");
        }
    }
}

MSDNの出力は次のとおりです。

文字を入力してください:X

文字は大文字です。

追加のサンプル実行は次のようになります。

文字を入力してください:x

文字は小文字です。

文字を入力してください:2

文字は英字ではありません。

私の出力は、このバージョンのコードについては何も述べていません。ifステートメントの前にwhile(1 == 1)行を追加すると、次のように3行の出力が得られます。

文字を入力してください:X

文字は大文字です。

文字は英字ではありません。

文字は英字ではありません。

文字を入力してください:x

文字は小文字です。

文字は英字ではありません。

文字は英字ではありません。

文字を入力してください:2

文字は英字ではありません。

文字は英字ではありません。

文字は英字ではありません。

elseステートメントの最後にConsole.ReadLine()を試しましたが、機能しません。また、elseブロックのコメントをwhile(1 == 1)でテストしましたが、出力行は1つしかありません。

同じサンプルコードの出力に3行が含まれているのはなぜですか?

4

1 に答える 1

5

私の最初の答えは間違っていました-Console.Read()ブロック。ウィンドウがすぐに閉じるため、VisualStudioからプログラムを実行したときに出力を見逃した可能性があります。プログラムの最後に2回追加するだけConsole.ReadLine();で、ウィンドウを開いたままにできます。1Console.ReadLine();つ目は、キャラクターの後に押したリターンを消費し、2つ目は、もう一度リターンを押すまで待機するため、ウィンドウを開いたままにします。

または、使用するプログラムを少し変更しますConsole.ReadKey()-使用する

var c = Console.ReadKey().KeyChar;

// Insert a line break to get the output on a new line.
Console.WriteLine();

Console.ReadLine();プログラムの最後にシングルを追加します。Console.ReadKey()returnを押すまでブロックされないため、2番目ので新しい行を消費する必要はありませんConsole.ReadLine();

元の回答

Console.Read()ブロックせず、-1使用可能な文字がない場合はすぐに戻ります。挿入するだけで

while (!Console.KeyAvailable) { }

直前

 char c = (char)Console.Read();

キャラクターが利用可能になるまで待つ。

于 2013-01-07T20:45:26.720 に答える