2013-01-07 46 views
1

这是一个初学者类型的问题,我为我可怜的英语感到抱歉。为什么同样的msdn C#示例程序输出与我的不一样?

这里的程序:

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

该字符不是字母字符。

该字符不是字母字符。

该字符不是字母字符。

我试过Console.ReadLine()结束的else语句,但不起作用。我也测试评论与其他块(1 == 1),我只得到1输出线..

我想知道为什么输出是包括3行我为相同的示例代码?

+0

您的项目是否设置为控制台应用程序? –

+0

是的,这是作为控制台应用程序创建的 – Kutluhan

+2

你是否正在按下字符间的“输入”按钮?如果是这样,那实际上是两个不是字母的字符。 – Steve

回答

5

我的第一个答案是错的 - Console.Read() blocks。您可能错过了从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(); 

等到有字符。

+6

只是使用'Console.ReadKey()'而不是添加一个spinwait会更好。 – Servy

+0

我错了 - 它实际上阻塞,直到你输入。我必须重新阅读文档。 –

相关问题