Flushing System.Console.Read()

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

在我的计划中,我有:

choice = (char)System.Console.Read(); 

后来在我使用的程序中

 if (System.Console.ReadLine() == "y") 

从用户那里获得输入。

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

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

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

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

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

这是我对fflush的等价物:

 while (Console.KeyAvailable) Console.ReadKey(true); 
 class Program { static void Main(string[] args) { if (Console.ReadLine() == "y") Console.WriteLine("You typed y"); Console.ReadLine(); } } 

你也可以这样做

 if (Console.ReadLine().ToLower() == "y") Console.WriteLine("You typed y"); 

如果你正在做char c =(char)Console.Read(); 然后无论你为Console.Read键入什么..你必须继续输入它旁边的Console.Readline()语句,以使Console.Readline工作。

或者你可以使用if(Console.ReadLine()。ToLower()。Trim()==“y”)

但为了这个工作,你为Console.Read()键入一些东西

比如输入值N然后你必须在一些空格之后键入y以便下一个Console.ReadLine进行评估。

像这样。

  ny 

 class Program { static void Main(string[] args) { char c = (char)Console.Read(); if (Console.ReadLine().ToLower().Trim() == "y") Console.WriteLine("You typed y"); Console.ReadLine(); } //input: ny //output: You typed y } 

有一些几乎不接近flush的东西是Console.Clear()方法,但这也清除了显示和缓冲区。