如何在输入值之前阻止用户按Enter键?

时间:2017-06-23 20:02:27

标签: c# .net console calculator

我正在构建一个控制台计算器程序,它要求用户输入两个值来进行数学运算。该应用程序非常全面,但我想限制跳过输入数字的能力。

Console.WriteLine("Insert a number for value 1: ");
string value1 = "0"; 
ConsoleKeyInfo key;

do
{
    key = Console.ReadKey(true);
    if (key.Key != ConsoleKey.Backspace)
    {
        double val = 0;
        bool _x = double.TryParse(key.KeyChar.ToString(), out val);
        if (_x)
        {
            value1 += key.KeyChar;
            Console.Write(key.KeyChar);
        }
    }
    else
    {
        if (key.Key == ConsoleKey.Backspace && value1.Length > 0)
        {
            value1 = value1.Substring(0, (value1.Length - 1));
            Console.Write("\b \b");
        }
    }
}
// Stops Receving Keys Once Enter is Pressed
while (key.Key != ConsoleKey.Enter);

Console.WriteLine();

//parsed here if entered correctly

Double x;
Double parsedVariable = 0;
if (Double.TryParse(value1, out x))
{
    Console.WriteLine("You have entered " + x);
    Console.Clear();

}

1 个答案:

答案 0 :(得分:0)

人们犯错误,有时甚至故意试图让程序失败。作为程序员,您的一项工作就是编写代码,以免错误和恶意导致程序失败。

您无法阻止用户犯错误。但是,您可以编写代码,以便容忍错误。

特别是,试图阻止用户输入他不应该输入的内容的整个想法比让用户输入任何内容更加困难且不那么友好然后检查它。例如,您的代码表面上可以"帮助"用户输入有效的浮点数实际上是一个障碍。

想象一下,用户已输入" 78.369"。但后来他意识到他应该进入" 0.78369"。所以他点击Home键(什么?你的编辑器不支持Home键?让我们假设它确实如此),意思是键入" 0。",然后箭头向前移动两个空格以删除句点。这是一件非常合理的事情,但您的代码不会让用户这样做。

它更加用户友好,更容易编码,让用户可以利用控制台的所有编辑功能(例如它们),然后检查用户的内容。整个输入。类似的东西:

string userInput;
double parsedValue;
bool valueIsGood;
do
{
    Console.Write("Enter the first value: ");
    userInput = Console.ReadLine();
    userInput = userInput?.Trim(); // get rid of leading and trailing spaces
    valueIsGood = 
        string.IsNullOrEmpty(userInput) == false
        && double.TryParse(userInput, out parsedValue);
    if (!valueIsGood)
    {
        Console.WriteLine("You must enter a number.");
    }
while (!valueIsGood);