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

1 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.");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

MSDN输出是:

输入一个字符:X

字符是大写的.

其他示例运行可能如下所示:

输入一个字符:x

该字符是小写的.

输入一个字符:2

角色不是字母字符.

我的输出没有说明这个版本的代码.如果我在if语句之前添加了一行(1 == 1)行,我会采用三行输出:

输入一个字符:X

字符是大写的.

角色不是字母字符.

角色不是字母字符.

输入一个字符:x

该字符是小写的.

角色不是字母字符.

角色不是字母字符.

输入一个字符:2

角色不是字母字符.

角色不是字母字符.

角色不是字母字符.

我尝试了Console语句的Console.ReadLine(),但是没有用.我也测试了注释else块与while(1 == 1),我只得到1输出线..

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

Dan*_*ner 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();
Run Code Online (Sandbox Code Playgroud)

Console.ReadLine();在程序结束时添加一个.Console.ReadKey()在你点击返回之前不会阻塞,因此不需要用一秒消耗新的行Console.ReadLine();.

原始答案

Console.Read()-1如果没有可用字符,则不会阻止并立即返回.你可以插入

while (!Console.KeyAvailable) { }
Run Code Online (Sandbox Code Playgroud)

就在之前

 char c = (char)Console.Read();
Run Code Online (Sandbox Code Playgroud)

等到角色可用.

  • 最好只使用`Console.ReadKey()`阻塞,而不是添加spinwait. (6认同)