Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
730 views
in Technique[技术] by (71.8m points)

.net - why getting null value from console in c# for readLine() after using read()

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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 to ReadLine() 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():

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

If you would like the user to still hit enter after the Read(), just use ReadLine and take a substring for the first character.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...