2017-03-04 234 views
0

我對編碼相對比較陌生,並且是C#的新手。我正在通過MSDN上的Channel 9教程進行工作,並且遇到了一些我不明白的涉及Console.ReadLine()的問題。C#Console.ReadLine()讀取多行

隨着教程的一個組成部分,教師產生了以下代碼:

static void Main(string[] args) 
    { 
     StreamReader myReader = new StreamReader("Values.txt"); 
     string line = ""; 

     while (line != null) 
     { 
      line = myReader.ReadLine(); 
      if (line != null) 
      { 
       Console.WriteLine(line); 
      } 
     } 

     myReader.Close(); 
     Console.ReadLine(); 
    } 

此代碼的工作 - 它讀取一系列數字,從Values.txt然後在每一個自己的路線,將它們發送到控制檯窗口。我的問題是爲什麼它有效。我的理解是Console.ReadLine()從輸入流中讀取一行。但是在這種情況下,儘管不是while循環的一部分,但它正在讀取幾行代碼。我預料到,按照書面的說法,控制檯窗口只顯示最後一行Values.txt,並且Console.ReadLine()必須在if語句中跟隨Console.WriteLine(line),以顯示所有行。我不瞭解什麼?謝謝您的幫助!

+0

不,我瞭解StreamReader.ReadLine()的功能,以及它在哪裏。有問題的Console.ReadLine()是代碼塊中的最後一行。 – namtrahj

回答

0

Console.WriteLine()是輸出到控制檯窗口的命令,因爲它是while循環的一部分。它打印文件的每一行。

Console.ReadLine()在這裏結束時,僅添加強制調試控制檯窗口保持打開狀態,直到用戶輸入和命中輸入爲止,通常對於這種情況Console.ReadKey()更合適。 但在上面的代碼中,Console.ReadLine()不是從文件中讀取數字的代碼。這是myReader.ReadLine();在while循環中。 所以while循環會一直讀取文件直到文件結束。

+0

我不明白爲什麼這是被拒絕! – Armin

+0

那是它Console.WriteLine()實際上顯示控制檯窗口中的文本?到目前爲止,在教程中,每次我們使用Console.WriteLine()時,都會緊接着Console.ReadLine()。對我來說,這似乎總是違反直覺,但我認爲這是對我有限的理解。但是,如果Console.WriteLine()實際上在做顯示工作,並且Console.ReadLine()只是負責控制檯窗口,那就更有意義了。 – namtrahj

+0

是Console.WriteLine()在控制檯窗口中顯示文本。 – Armin

0

每次循環執行時,它都會讀取一行。如果該行不爲空,它將一次又一次地循環,直到沒有更多行。並且每次循環,並且line不爲空時,它將打印該行。

這一切都發生在最後的Console.ReadLine()聲明之前。所做的只是暫停程序,以便您可以看到輸出。

+0

謝謝!我對這兩種方法在做什麼有一個基本的誤解。 – namtrahj