2013-01-07 74 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

我錯了 - 它實際上阻塞,直到你輸入。我必須重新閱讀文檔。 –

相關問題