为什么同样的msdn C#示例程序输出与我的不一样?

时间:2013-01-07 20:40:35

标签: c# boolean

这是一个初学者类型的问题,我很抱歉我的英语不好。

这是程序:

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语句之前添加了一行(1 == 1)行,我会采用三行输出,如:

  

输入一个字符:X

     

该字符为大写。

     

该字符不是字母字符。

     

该字符不是字母字符。

     

输入字符:x

     

该字符为小写。

     

该字符不是字母字符。

     

该字符不是字母字符。

     

输入一个字符:2

     

该字符不是字母字符。

     

该字符不是字母字符。

     

该字符不是字母字符。

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

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

1 个答案:

答案 0 :(得分: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()不会阻止,因此无需使用第二个Console.ReadLine();消耗新行。

原始回答

如果没有可用的字符,

Console.Read()不会阻止并立即返回-1。你可以插入

while (!Console.KeyAvailable) { }

之前

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

等到角色可用。