使异常工作
本文关键字:工作 异常 | 更新日期: 2023-09-27 18:20:49
我不知道如何让异常正常工作
程序应该提示要转换的英镑总数和汇率。然后,它应该以类似于下面输出的方式显示所需的follars数量。
这里的第一部分是我的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CurrencyConvertor
{
class Program
{
static void Main(string[] args)
{
CurrencyConvertor();
Console.ReadLine();
}
private static void CurrencyConvertor()
{
int ivalue;
float exchange;
float results;
bool valid;
Console.WriteLine(" please enter a whole number of pounds");
do
{
try
{
ivalue = int.Parse(Console.ReadLine());
Console.WriteLine(" pounds entered : " + ivalue);
Console.WriteLine("please enter the exchange rate");
exchange = float.Parse(Console.ReadLine());
Console.WriteLine(" exchange rate is " + exchange);
results = ivalue * exchange;
Console.WriteLine(" £ " + ivalue + " is equivlent to" + " $ {0:N}", results);
valid = true;
}
catch
{
Console.WriteLine("unable to convert to integer");
Console.WriteLine(" Try again- ensure you enter a number");
valid = false;
}
} while (valid == false);
Console.ReadLine();
}
}
}
这两个输入都应该经过验证,以确保用户输入适当的数据类型——下面的输出说明了如果用户输入非数字数据时的预期输出。
所以它应该显示
please enter an integer
try again - ensure you enter an integer
12
pounds entered 12
please enter an exchange rate
asd
unable to convert to a number
try again - ensure you enter a number
1.56
exchange rate is 1:56
£12.00 is equivalent to $18.72
我似乎无法让它显示汇率的错误消息,即"无法转换为数字"
您的代码中存在一些缺陷:
-
您应该更喜欢
int.TryParse
而不是Parse
。Exception
应该是一种意外的行为,在这种行为中你必须以某种方式做出反应。用户输入并不意外,您知道使用可能会输入您可以/必须验证的无效数据。 -
当您使用异常时,不应该一次捕获所有异常,而应该捕获某种类型的异常,您知道如何做出反应。
int.Parse
本身抛出三种异常(请参见http://msdn.microsoft.com/de-de/library/b3h1hf19(v=vs.110).aspx),您可以从系统本身获得其他一些。您的代码应该捕获FormatException
,而不是捕获全部。 -
无论如何,如果你只是想修复你的代码,你可以通过使用两个单独的
try .. catch
块来解决你的问题,这些块带有单独的错误消息。
异常是用来捕捉异常的——那些你不希望发生但可能会的事情
您应该使用TryParse
方法而不是
while(!int.TryParse(Console.ReadLine(), out ivalue)
{
Console.WriteLine("Thats not a number, try again");
}