我正在重新创建游戏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;
}
答案 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
循环,该循环将至少运行一次。