小的编码项目不捕获FormatException
本文关键字:FormatException 项目 编码 | 更新日期: 2023-09-27 18:13:36
所以我最近开始了我的第一个c#编码课程。我目前正试图写一个简短的程序,打印出耶!跟我说的一样多。现在,为了防止任何格式异常,我尝试添加一个try和catch。但是,由于某种原因,这不起作用,我似乎不知道为什么。代码如下:
Console.Write("Enter the number of times to print '"Yay!'": ");
string entry = Console.ReadLine();
var number = int.Parse (entry);
bool print = true;
while(print)
{
try
{
if(number <= 0)
{
print = false;
}
else
{
Console.WriteLine("Yay!");
number -= 1;
}
}
catch(FormatException)
{
Console.WriteLine("You must enter a whole number.");
}
}
据我所知,我已经拥有了完成这项工作所需的一切。有人知道我做错了什么吗?
感谢您的阅读!
var number = int.Parse (entry);
应该抛出异常,并且由于超出 try {}
作用域,因此异常未被捕获。将片段移动到作用域:
Console.Write("Enter the number of times to print '"Yay!'": ");
string entry = Console.ReadLine();
bool print = true;
try {
// int.Parse is within the try {} scope now
var number = int.Parse (entry);
while(print) {
...
}
}
catch(FormatException) {
Console.WriteLine("You must enter a whole number.");
}
或将int.Parse
转化为int.TryParse
,并完全放弃try {...} catch {...}
(较好的溶液)
Console.Write("Enter the number of times to print '"Yay!'": ");
int number;
if (!int.TryParse(Console.ReadLine(), out number)) {
Console.WriteLine("You must enter a whole number.");
return;
}
bool print = true;
// There's no need in try {} catch {} now
while(print) {
...
}
您需要将int.Parse
放置在try-catch块中。
这是你的代码的修改版本。
static void Main(string[] args)
{
bool print = true;
while (print)
{
Console.Write("Enter the number of times to print '"Yay!'": ");
string entry = Console.ReadLine();
try
{
var number = int.Parse(entry);
for (int i = 0; i < number; i++)
{
Console.WriteLine("Yay!");
}
}
catch (FormatException)
{
Console.WriteLine("You must enter a whole number.");
}
}
}