我正在为我的一个课程学习C#而我的作业需要从控制台获得用户输入。
在我的课程中,我有:
choice = (char)System.Console.Read();
稍后在程序中我使用
if (System.Console.ReadLine() == "y")
从用户那里获得输入。
运行程序时会跳过第二个语句。我猜测System.Console.Read()在流中留下换行符。在C / C ++中,有fflush()和cin.ignore()。 C#中的等效函数是什么?
我知道使用ReadLine()或ReadKey()可能更容易,但我只是好奇如何将Read()与换行符一起使用
答案 0 :(得分:14)
这相当于fflush:
while (Console.KeyAvailable)
Console.ReadKey(true);
答案 1 :(得分:10)
是的,控制台输入由操作系统缓冲。在用户按Enter键之前,不会返回Read()调用。知道了这一点,之后你可以简单地调用ReadLine()来使用缓冲区。或者首先使用ReadLine()。
或返回单击键的专用方法:Console.ReadKey()
但是,如果您希望程序与输入重定向一起使用,则不希望使用它。这就是为什么有多种方法可以实现相同的目标:ReadKey()绕过stdin输入流,即重定向的输入流。它直接与低级控制台支持功能对话。有一种方法可以检测到这一点,因此您可以支持两者,请检查this answer。
答案 2 :(得分:1)
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进行评估。
喜欢这个。
n y
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: n y
//output: You typed y
}
有一些几乎不接近flush的东西是Console.Clear()方法,但这也清除了显示和缓冲区。