我不确定如何让例外工作
程序应提示转换的整数磅数和汇率。然后它应该以类似于下面输出的方式显示相当数量的对开。这里的第一部分是我的代码
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
我似乎无法显示汇率的错误消息,说“无法转换为数字”
答案 0 :(得分:1)
有例外可以捕获异常 - 你不希望发生的事情,但可能
您应该使用TryParse
方法
while(!int.TryParse(Console.ReadLine(), out ivalue)
{
Console.WriteLine("Thats not a number, try again");
}
答案 1 :(得分:1)
您的代码存在一些缺陷:
您应该更喜欢int.TryParse
而不是Parse
。 Exception
应该是一种意外行为,您必须以某种方式做出反应。用户输入并非意外,您知道使用输入可能/必须验证的无效数据。
使用异常时,不应一次捕获所有异常,而应该知道如何做出反应的某种异常。 int.Parse
本身会抛出三种异常(参见http://msdn.microsoft.com/de-de/library/b3h1hf19(v=vs.110).aspx),您可以从系统本身获取其他一些异常。您的代码应该捕获FormatException
而不是全部捕获。
无论如何,如果您只是想修复代码,可以使用带有分隔错误消息的两个单独的try .. catch
块来解决您的问题。