首先,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()
。
答案 0 :(得分: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();
}
}
}