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) 行,我会采用三行输出,例如:

输入一个字符:X

字符是大写的。

该字符不是字母字符。

该字符不是字母字符。

输入一个字符:x

字符是小写的。

该字符不是字母字符。

该字符不是字母字符。

输入一个字符:2

该字符不是字母字符。

该字符不是字母字符。

该字符不是字母字符。

我尝试了 else 语句的 Console.ReadLine() 结尾,但不起作用。我还用 while (1==1) 测试了 else 块的注释,我只得到 1 个输出行..

我想知道为什么对于相同的示例代码,输出包含 3 行?

4

1 回答 1

5

我的第一个答案是错误的 -Console.Read()块。从 Visual Studio 运行程序时,您可能只是错过了输出,因为窗口会立即关闭。只需Console.ReadLine();在程序末尾附加两次以保持窗口打开。第一个Console.ReadLine();将消耗您在角色之后按下的回车,第二个将等到您再次按下回车并因此保持窗口打开。

或者稍微修改一下程序来使用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 之前不会阻塞,因此无需再消耗新行Console.ReadLine();

原始答案

Console.Read()不会阻塞,-1如果没有可用的字符将立即返回。你可以插入

while (!Console.KeyAvailable) { }

就在之前

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

等到一个字符可用。

于 2013-01-07T20:45:26.720 回答