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は static 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 に答える