我正在尝试制作一个带有数字的程序并将其打印在屏幕上,但是如果用户按Enter键,则要求用户再次输入数字,但它会显示异常。
Enter_No:
Console.WriteLine("enter number");
int? n = Convert.ToInt32(Console.ReadLine());
if (n == (int?)null)
{
goto Enter_No;
}
else
{
Console.WriteLine(n);
}
答案 0 :(得分:2)
使用int.TryParse
:
int? num = null;
while(!num.HasValue)
{
Console.WriteLine("Please enter an integer:");
num = int.TryParse(Console.ReadLine(), out int i) ? i : new int?();
}
Console.WriteLine("Entered integer: " + num.Value);
答案 1 :(得分:1)
Tim的解决方案非常紧凑。这就是您尝试失败的原因。
From MSDN,如果满足以下条件,则Convert.ToInt32()会引发FormatException:
值不包含可选的符号,后跟数字序列(0到9)。
首选方法是int.TryParse()
,因为如果无法解析整数而不是抛出异常,它将返回false。
尽管C#支持goto
关键字,但在少数情况下(或取决于您询问的人),很少或没有情况是最佳的流控制选项。蒂姆(Tim)的while
循环是一种极好的方法。
答案 2 :(得分:0)
首先,不要使用“转到”:
第二:检查数据并使用tryparse:
bool success = false;
do
{
Console.WriteLine("enter number");
var n = Console.ReadLine();
if (n == null)
{
// goto Enter_No;
}
else
{
int typedNum;
success = int.TryParse(n, out typedNum);
Console.WriteLine(typedNum);
}
} while (!success);