我希望下面的C#程序仅打印“ EOF!”。一旦在控制台中按“ Ctrl-Z”。
相反,该程序在我按Enter键后立即完成:
var textReader = Console.In;
var sb = new StringBuilder();
while(textReader.Peek() != -1)
{
sb.Append((char)textReader.Read());
}
Console.WriteLine("Entered: '{0}'", sb);
Console.WriteLine("EOF!");
例:
12345 <= I entered this
Entered: '12345 <= program outputs this
'
EOF!
Press any key to continue . . .
任何人都可以解释上述行为吗?这根本不是我所期望的。
如何从控制台读取多行输入内容,一次输入一个字符?
更新:如以下回答:问题是不能依赖Peek()。虽然使用Read()可以。
最佳答案
Console.In.Read()在EOF上返回-1,因此您可以执行以下操作:
int c;
while((c = Console.In.Read()) != -1)
Console.Out.Write((char)c);
关于c# - Console.In.Peek()在输入时返回-1,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11284082/