Console.In.Peek()在输入时返回-1
我本以期望以下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 . . .
任何人都可以解释上述行为吗? 这根本不是我的预期。
如何从Console中读取多行输入。一次只能输入一个字符?
更新:如下所述:问题是不能依赖Peek()。 但是使用Read()可以正常工作。
Console.In.Read()在EOF上返回-1,所以你可以这样做:
int c; while((c = Console.In.Read()) != -1) Console.Out.Write((char)c);
按Ctrl-Z将从Console.In.Peek();
生成值26 Console.In.Peek();
您必须关闭输入流才能生成-1(当您关闭控制台时,按Ctrl-C(默认情况下),或显式调用Console.In.Close()
)。
此外,默认情况下,控制台流将以线路模式运行,这意味着在您按Enter键之前,实际上不会使用字符填充流。 您可以使用“Console.ReadKey”来阻止(请参阅http://msdn.microsoft.com/en-us/library/system.consolekeyinfo.key.aspx ),也可以将控制台切换为线路模式。 AC#的例子可以在这里找到: http : //ewbi.blogs.com/develops/2005/11/net_console_pre.html 。
- 在任何应用程序中使用持久层有什么用?
- `PrintQueue.AddJob`没有完成
- ‘Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment’的类型初始值设定项引发exception
- 当焦点在WindowsFormsHost中时,为什么Keyboard.FocusedElement为null? 它打破了WPF命令路由
- TextBoxFor()不生成validation标记
- 有没有更好的方法在C#中创建深度和浅层克隆?
- 共享WCF服务和客户端之间的接口(标记为W / ServiceContract)
- EF 6 – 如何正确执行并行查询
- 在ASP.NET中转换/访问QueryString值