2013-07-22 44 views
3

我有以下代碼爲什麼使用讀取之後獲得在C#中的readLine從控制檯空值()()

char c1 = (char)Console.Read(); 
Console.WriteLine("Enter a string."); 
string instr = Console.ReadLine(); 

它需要一個值c1,之後它打印「輸入一個字符串」。但是,當我嘗試輸入一個字符串時,它看起來像ReadKey()一樣工作,這意味着只要按任意鍵,它就會顯示instr具有空值。

如果我刪除第一行(char c1 = (char)Console.Read();),程序將正常工作。

這是爲什麼?

回答

5

當您調用Read()時,它仍然會阻塞,直到您按Enter鍵,即使實際方法只會消耗輸入流中的單個字符。當你接着輸入時,字符確實被讀取,但換行符不是。由於換行符仍在輸入流中,所以立即返回ReadLine(),因爲它讀取了行結束符。如果要調試,可以更深入地看到此行爲。

要解決這一點,我可以建議以下,使用ReadKey()

char c1 = Console.ReadKey().KeyChar; 
Console.WriteLine(Environment.NewLine /* Added simply for readability */ 
    + "Enter a string."); 
string instr = Console.ReadLine(); 

如果您想用戶仍然打Read()後進入,只是使用ReadLine,並採取子字符串的第一個字符。

+0

thanx rudi,它工作正常 – dnyaneshwar

+0

@ user2605692沒問題,一定要接受如果完全解決了這個問題。 –

相關問題