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