I have the following code
char c1 = (char)Console.Read();
Console.WriteLine("Enter a string.");
string instr = Console.ReadLine();
It takes a value for c1
, after that it prints "Enter a string". However when I try to enter a string, it appears to be working like ReadKey()
, meaning that as soon as I press any key it's showing that instr
has a null value.
If I remove the first line (char c1 = (char)Console.Read();
), program works correctly.
Why is this?
When you call
Read()
, it still blocks until you hit enter even though the actual method will only consume a single character from the input stream. When you subsequently hit enter, the character is indeed read, but the newline isn't. Since the newline is still in the input stream, the call toReadLine()
immediately returns, as it's read a line terminator. You can see this behaviour in more depth if you were to debug.To resolve this I could suggest the following, using
ReadKey()
:If you would like the user to still hit enter after the
Read()
, just useReadLine
and take a substring for the first character.