Flushing System.Console.Read()

Ala*_*lan 7 c#

我正在为我的一个课程学习C#而我的作业需要从控制台获得用户输入.

在我的计划中,我有:

choice = (char)System.Console.Read();
Run Code Online (Sandbox Code Playgroud)

后来在我使用的程序中

if (System.Console.ReadLine() == "y")
Run Code Online (Sandbox Code Playgroud)

从用户那里获得输入.

运行程序时会跳过第二个语句.我猜测System.Console.Read()在流中留下换行符.在C/C++中,有fflush()和cin.ignore().C#中的等效函数是什么?

我知道使用ReadLine()或ReadKey()可能更容易,但我只是好奇如何使用Read()和换行符

Mdx*_*hmt 15

这是我对fflush的等价物:

while (Console.KeyAvailable)
    Console.ReadKey(true);
Run Code Online (Sandbox Code Playgroud)


Han*_*ant 11

是的,控制台输入由操作系统缓冲.在用户按Enter键之前,不会返回Read()调用.知道了这一点,之后你可以简单地调用ReadLine()来使用缓冲区.或者首先使用ReadLine().

或者返回单击键的专用方法:Console.ReadKey()

但是,如果您希望程序与输入重定向一起使用,则不希望使用它.这就是为什么有多种方法可以实现相同的目标:ReadKey()绕过stdin输入流,即重定向的输入流.它直接与低级控制台支持功能对话.有一种方法来检测这个,所以你可以支持两者,检查这个答案.