1

首先,Console.ReadKey()不是答案。

我需要能够擦除我写的第一个字符。

基本上,我想做的是一个测量你打字速度的应用程序。它工作得很好,但我正在努力解决美学问题。

我一开始做的是调用Console.ReadKey(),然后调用这个启动 Timer 的函数(好吧,我在编写应用程序 30 分钟后意识到恰好有一个 Stopwatch 类 ._.),然后我会存储用户使用 输入Console.ReadLine(),然后停止此计时器。

static Word[] getWords()
{
    Word[] words;
    int c = Console.ReadKey().KeyChar;
    Timing.start();
    string str = (c.ToString() + Console.ReadLine()).ToLower();
    charCount = str.Length;
    words = Word.process(str);
    Timing.stop();
    return words;
}

charCount是一个静态int,Word只是一个包装字符串的类。 Word.process是一个函数,它接受一个字符串,省略所有符号并返回一个用户键入的单词数组。 Timing只是一个包装类的Timer类。我认为这就是关于代码需要解释的全部内容。

我需要做的是Timing.start()当用户输入一个字符并且他必须能够删除它时调用。

4

1 回答 1

3

需要一些调整,但是这样的事情怎么样?

更新 - 现在一 (1) 个退格有效,但多个退格无效。啊!希望这将为您指明正确的方向。

更新 #2 - 使用 StringBuilder.... 退格现在可以使用 :)

namespace ConsoleApplication4
{
    class Program
    {
        static void Main(string[] args)
        {

            StringBuilder sb = new StringBuilder();
            // you have alot of control on cursor position using
            // Console.SetCursorPosition(0, Console.CursorTop -1);
            List<DateTime> inputs = new List<DateTime>();
            ConsoleKeyInfo cki;

            Console.WriteLine("Start Typing...");
            Console.WriteLine("Press the Escape (Esc) key to quit: \n");
            do
            {
                cki = Console.ReadKey();
                if (cki.Key == ConsoleKey.Spacebar)
                {
                    sb.Append(cki.KeyChar);
                }

                else if (cki.Key == ConsoleKey.Backspace)
                {
                    Console.Write(" ");
                    Console.Write("\b");
                    sb.Remove(sb.Length - 1, 1);
                }

                else if (cki.Key == ConsoleKey.Enter)
                {
                    sb.Append(cki.KeyChar + " ");
                    Console.WriteLine("");
                }

                else
                {
                    sb.Append(cki.KeyChar);
                }

                inputs.Add(DateTime.Now);
            } while (cki.Key != ConsoleKey.Escape);

            Console.WriteLine("");
            Console.WriteLine("=====================");
            Console.WriteLine("Word count: " + Regex.Matches(sb.ToString(), @"[A-Za-z0-9]+").Count);

            TimeSpan duration = inputs[inputs.Count - 1] - inputs[0];

            Console.WriteLine("Duration (secs): " + duration.Seconds);
            Console.ReadLine();
        }
    }
}
于 2012-07-12T14:37:31.270 回答