c# - 如果输入无效数据如何重复代码
问题描述
我需要让这个计算停车费的代码出错,如果提供了错误的数字,我需要用户重新输入数据。例如,如果用户输入的金额小于 1 或大于 24,则会出现错误代码并要求用户重新输入有效金额。输入有效金额后,我希望它输出 parkFee。我还没有更新我的伪代码,所以对此表示歉意。
/* PSEUDOCODE */
/* HOURLY_RATE=2.5
* INPUT parkTime
* parkFee = HOURLY_RATE * hours
* OUTPUT parkFee */
decimal parkTime; // input - time in hour eg 1.5 for 1 and a half hours
const decimal HOURLY_RATE = 2.50m; // HOURLY_RATE * INPUT parkTime = parkFee
const decimal MAX_FEE = 20.00m; // MAX_FEE is set as a payment cap and ignores any extra charges incurred over 8 hours
decimal parkFee;
Console.WriteLine("ParkingFee1 program developed by: Ryley Copeman");
Console.WriteLine("Please enter your total time parked in hours: Eg 1.5 or 3.0");
parkTime = decimal.Parse(Console.ReadLine());
if (parkTime > 8)
{
Console.Write("Total fee is $" + MAX_FEE);
}
else
{
parkFee = Math.Ceiling(parkTime) * HOURLY_RATE;
Console.Write("Parking Fee = $" + parkFee);
}
while(parkTime < 0 || parkTime > 24) // validate...
//while (parkTime <= 0) )
{
Console.WriteLine("Error – Park Time out of range");
Console.WriteLine("Enter - Park Time between 0 and 24 (HOURS):");
parkTime = int.Parse(Console.ReadLine());
}
}
}
}
解决方案
我想你只需要这个:
do
{
Console.WriteLine("Please enter your total time parked in hours: Eg 1.5 or 3.0");
parkTime = decimal.Parse(Console.ReadLine());
if (parkTime < 1 || parkTime > 24)
{
Console.WriteLine("Error – Park Time out of range");
}
}
while (parkTime < 1 || parkTime > 24);
if (parkTime > 8)
{
Console.Write("Total fee is $" + MAX_FEE);
}
else
{
parkFee = Math.Ceiling(parkTime) * HOURLY_RATE;
Console.Write("Parking Fee = $" + parkFee);
}
请注意,您可能需要调整代码以始终计算费用,然后应用最大值:
parkFee = Math.Min(MAX_FEE, Math.Ceiling(parkTime) * HOURLY_RATE);
Console.Write("Parking Fee = $" + parkFee);
这里Math.Min
将选择两个值中的最小值。
最后,请注意,decimal.Parse
如果您输入了它不期望的内容(例如“1.2Hello”或“”),则会出错,因此最好使用TryParse
:
bool isValidTime = false;
do
{
Console.WriteLine("Please enter your total time parked in hours: Eg 1.5 or 3.0");
bool parsedOK = decimal.TryParse(Console.ReadLine(), out parkTime);
isValidTime = parsedOK && parkTime >= 1 && parkTime <= 24;
if (!isValidTime)
{
Console.WriteLine("Error – Park Time out of range");
}
}
while (!isValidTime);
parkFee = Math.Min(MAX_FEE, Math.Ceiling(parkTime) * HOURLY_RATE);
Console.Write("Parking Fee = $" + parkFee);
此处循环将继续,直到输入有效值。请注意,在循环结构中,您还可以使用break;
(离开循环)和continue;
(移动到循环的下一次迭代)来控制流程。
推荐阅读
- android - 任务错误:app:mergeExtDexDebug FAILED for gradle version 3.5.2
- javascript - TypeScript 接口中粗箭头函数和普通函数类型声明的区别
- python - 创建以调用者脚本文件名命名的日志文件
- c# - 不同控制器中的 OData 自定义路由约定
- swift - 我在哪里从 UIAlertController 的选择中重新加载 tableView?
- python - 在 read_csv() 中忽略的 Pandas 类别 dtypes
- python-3.x - 将多个数据框转换为带有标题的 HTML 页面
- javascript - 在给定条件下修改 JavaScript 中的树结构数据?
- firebase - 如何让登录用户安全连接到数据库?智威汤逊?
- python - 如何在套接字编程python中获取用户PC名称