我正在创建一个程序,收集一些个人信息和人员的工资来计算他们的税后收入。 我正在为菜单使用switch语句。看起来像这样:
Get a person’s details (p)
Get the Salary (s)
Calculate and display (d)
Exit (x)
我希望用户按顺序完成这些操作,因此在输入工资或计算工资之前,他们必须输入详细信息。例如:全名是他们必须填写的第一个个人详细信息。 此时,用户已选择(d)显示他们的收入,但他们将因为未填写个人详细信息而被停止。
Console.WriteLine("\nUser selected to calculate and display their earnings\n");
if (full_name == "")
{
Console.WriteLine("Error: Please enter personal details before attempting to display your pay\n");
break;
}
这样可以正常工作,因为它是一个字符串,所以如果它被留空,它们将返回原始菜单。
但是我也想阻止他们试图选择选项(d),如果他们没有填写选项,他们的工资,存储在浮动中。如果我试试这个:
if (annual_salary == null)
{break;}
它说它总是假的,因为float类型的值永远不会等于float类型的null。
这是我的while循环选项,用于在用户选择此选项时收集数据。
while (valid == false)
{
Console.Write("Enter your annual salary: > ");
vtemp = Console.ReadLine();
// Validate the data entered
if (vtemp == "")
{
Console.WriteLine("\nError : Annual salary cannot be empty. Please try again...\n");
}
else
// Check if data is a valid integer
returnVal = float.TryParse(vtemp, out annual_salary);
if (returnVal == false)
{
Console.WriteLine("\nError : Please enter numbers only. Please try again...\n");
}
else
// Check value is positive
if (i < 0)
{
Console.WriteLine("\nError : Annual salary must be positive. Please try again...\n");
}
else
{
valid = true;
break;
}
}// End while
但是如果用户从未选择(s)并决定在填写(p)后直接进入(d),他们将从输出中获得不正确的值。
所以澄清一下:如何检查浮点值是空还是跳过?
答案 0 :(得分:0)
最简单的解决方案是给您的s
一个默认的负值,并确保在继续之前它不是负数。
根据您执行此操作的方式/位置,您可以执行不同的操作。如果您正在进行WPF或其他GUI开发,则可以禁用该按钮,直到它全部设置完毕。
如果你想在逻辑中执行它,你可以使用上面的解决方案,或者在选择一个选项时将一些标志设置为true,并且只有在所有标志都设置为true时才会继续,因此只有一个。
编辑:
我已将p
更新为s
。它真的一样。当他点击d
时,要么检查s
是否为否定(你可以将其初始化为-1),或者如果你选择了旗帜选项,请确保它的标志为真(它为&#39} ;例如,当您点击s
时设置。)
然后,如果你有所有输入,计算,否则写一条消息说他需要输入工资。