如何让程序读取回车键并停止循环?

时间:2016-03-12 13:19:02

标签: c#

我想做一个小游戏。该程序将循环输出数字,并且该人必须通过单击“输入”键以前面指定的确切数字停止循环。像这样:

static void Main(string[] args)
    {
        Console.WriteLine("try to click the 'enter' button when the program shows the number 4");
        for (int i = 0; i < 10; i++)
        {
            Console.WriteLine(i);
            //here will be the command which reads the enter key and stops the loop


        }


        }

其中一位用户告诉我使用此代码:

Console.WriteLine("try to click the 'enter' button when the program shows the number 4");
    for (int i = 0; i < 10; i++)
    {
        Console.WriteLine(i);
        if (e.KeyChar == (char)13)
        {
           break;
        }
    }

问题是,当我使用这段代码时,我有一个错误,上面写着“当前上下文中不存在名称'e'”。 这是什么意思?

提前致谢。

3 个答案:

答案 0 :(得分:2)

读取控制台输入有两种基本方法:

  1. Console.ReadLine()将暂停并等待用户输入文本,然后输入回车键,返回输入键之前输入的所有内容。

  2. Console.ReadKey()将等待按键并将其作为ConsoleKeyInfo结构返回,其中包含按下的键的信息,它代表的字符(如果有)以及修改键(ctrl,alt) ,移动)被压了。

  3. 如果您不想等到用户按下某个键,您可以使用Console.KeyAvailable属性来检查是否有等待读取的按键。这可以在定时循环中使用,以便为键输入提供超时:

    DateTime endTime = DateTime.Now.AddSeconds(10);
    while (DateTime.Now < endTime)
    {
        if (Console.KeyAvailable)
        {
            var key = Console.ReadKey();
            if (key.Key == ConsoleKey.Enter)
            {
                // do something with key
                //...
                // stop waiting
                break;
            }
        }
        // sleep to stop your program using all available CPU
        Thread.Sleep(0);
    }
    

答案 1 :(得分:1)

我找到了解决问题的基本想法here

在这个答案中,他使用Console.KeyAvaliable属性来检查是否按下了一个键,然后检查按键是否是您所查找的键。

为了满足您的需求,您必须改变它:

static void Main (string[] args)
    {

        Console.WriteLine ("try to click the 'enter' button when the program shows the number 4");

        int counter = 0;
        int limit = 100000;

        do {
            while (counter < limit && !Console.KeyAvailable) {
                Console.WriteLine (counter);
                counter++;
            }       
        } while (Console.ReadKey (true).Key != ConsoleKey.Enter);

    }

答案 2 :(得分:0)

尝试:

  ConsoleKeyInfo cki;

  do
  {
    cki = Console.ReadKey();
    //What you need to do code
  } while (cki.Key != ConsoleKey.Enter);

Console.ReadKey()将等待按键并将其作为ConsoleKey返回,您只需捕获并测试它是否是您想要的按键。