这是一个初学者类型的问题,我很抱歉我的英语不好.
这是程序:
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行?
我的第一个答案是错误的 - 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)
等到角色可用.