如何阻止用户键入文本

时间:2017-01-16 00:50:39

标签: c#

我正在重新创建游戏Hammurabi(只是我的大学的任务)我想以某种方式检查用户是否正在输入文本,以便它进入while循环以提示他输入文本。我知道如何让用户输入我想要的数字,但是如果他输入类似于" a"的内容,我就不知道如何修复它。然后我的程序会出错。

以下是我所谈论的一个例子:

while (acresToBuy < 0)
{
    Console.WriteLine("Please type a positive number or 0");
    acresToBuy = int.Parse(Console.ReadLine());
}

int cost = trade * acresToBuy;
while (cost > bushels)
{
    Console.WriteLine("We have but " + bushels + " bushels of grain,    not " + cost);
    acresToBuy = int.Parse(Console.ReadLine());
    cost = trade * acresToBuy;
}

2 个答案:

答案 0 :(得分:1)

您可以使用Int.TryParse。例如:

while (acresToBuy < 0)
{
    Console.WriteLine("Please type a positive number or 0");
    acresToBuy = int.TryParse(Console.ReadLine(), out acresToBuy) ? acresToBuy : -1;
}

如果Int.TryParse失败,那么该方法将返回false,然后我们将-1分配给acresToBuy,否则,如果成功,我们只需将其分配回自身。

答案 1 :(得分:0)

您不应该使用int.Parse(或其他类型的等价物),除非您绝对可以保证输入可以解析,并且在用户输入的地方您无法做到这一点参与其中。相反,您应该使用int.TryParse

do
{
    Console.WriteLine("Please type a positive number or 0");

    int input;
    if (int.TryParse(Console.ReadLine(), out input)
        && input >= 0) // You can validate the input at the same time
    {
        acresToBuy = input;
    }
    else
    {
        Console.WriteLine("That was not the correct input. Please try again.");
        acresToBuy = -1;
    }
} while (acresToBuy < 0);

修改while循环将始终在执行前检查其状态,因此请注意,只有acresToBuy具有小于0的初始值(即-1)。为防止不得不针对预先存在的条件不断检查,您应该使用do-while循环,该循环将至少运行一次。