2013-06-18 45 views
0

我正在寫一個非常愚蠢的程序。第一個Console.ReadLine()立即返回

我不知道爲什麼下面的代碼將無法正常工作:

static void Main(string[] args){ 
     <Some silly code> 
     Console.WriteLine("Please choose the lab you are working on:"); 
     int choose = Console.Read(); 
     <Some more silly code, including 1 Console.writeLine() call > 

     Console.WriteLine("Enter the DB server location"); 
     string DBServer = Console.ReadLine(); 
     Console.WriteLine("Enter the DB name"); 
     string DBName = Console.ReadLine(); 
    } 

當我運行程序,它永遠不會等待第一的ReadLine聲明

string DBServer = Console.ReadLine(); 

它打印兩行立即

Enter the DB server location 
Enter the DB name 

然後讀取第二個ReadLine string DBName = Console.ReadLine();

當我檢查輸入表單用戶時,它確實讀取了第二個,但第一個字符串是空的。
任何想法?

回答

3

這是因爲您使用的是Console.Read,它會到達一個字符,但會在單獨完成後離開回車。然後將由ReadLine接收。

輸入是一個流。當您輸入單個字符然後按回車時,流中會有2-3個字符(取決於系統):您輸入的字符和換行符。 Read只是爲您提供流中的下一個字符,而ReadLine將讀取到下一個換行符的所有內容。再次,從流中。所以你的Read提取一個字符和ReadLine已經找到下一個換行符,因此繼續愉快。

您可以插入一個虛擬ReadLine,或使用ReadKey將剛纔讀的關鍵,你的程序看到輸入之前將不需要回報,或使用ReadLine爲單字符輸入,以及。