我正在尝试检查用户的回复是double
还是int
,但int
是特定的,而double
则不是,因为我可能是解释它的一个正确的混乱,这是代码:
Console.WriteLine("\n 2) Q: How old is Sally? \n");
int nSallyAge = Convert.ToInt32(Console.ReadLine());
double dSallyAge = Convert.ToDouble((nSallyAge));
if (nSallyAge == 62 || dSallyAge == 62.0)
{
// Increase Score
sUser1Score++;
Console.WriteLine("\n A: Correct, Sally's age is 62, you have been awarded 1 point. \n");
Console.ReadLine();
}
我正在尝试做的是,而不是dSallyAge
等于62.0
,它必须等于任何double
数字。
答案 0 :(得分:1)
我会通过首先创建一个从用户获取double的方法来解决这个问题(当然,这也会接受一个int)。这将从主代码中删除错误处理。
下面代码中的 注意,Math.Truncate
可以替换为Math.Floor
,结果相同:
private static double GetDoubleFromUser(string prompt)
{
double input;
while (true)
{
if (prompt != null) Console.Write(prompt);
if (double.TryParse(Console.ReadLine(), out input)) break;
Console.WriteLine("Sorry, that is not a valid number. Please try again.");
}
return input;
}
然后,在我的主代码中,我会从用户那里得到数字,并使用Math.Truncate
方法只读取用户传入的double的第一部分(这听起来像你想做)。这意味着如果用户输入62到62.0到62.999之间的任何内容,它会将结果截断为'62':
double nSallyAge = GetDoubleFromUser("2) Q: How old is Sally? ");
if (Math.Truncate(nSallyAge) == 62)
{
// Increase Score
sUser1Score++;
Console.WriteLine("A: Correct, Sally's age is 62, you have been awarded 1 point.");
Console.ReadLine();
}
使用它的其他替代方法是:
int sallyAge = Math.Truncate(GetDoubleFromUser("2) Q: How old is Sally? "));
if (sallyAge == 62)
{
// Increase Score
sUser1Score++;
Console.WriteLine("A: Correct, Sally's age is 62, you have been awarded 1 point.");
Console.ReadLine();
}
或者,您可以使用首先返回int的输入函数:
private static int GetIntFromUser(string prompt)
{
return Math.Truncate(GetDoubleFromUser(prompt));
}
答案 1 :(得分:-1)
在上面的代码中,您将输入转换为整数,然后将int结果转换为double。
假设您只允许输入数值,为什么不尝试这样的东西。这将识别输入是否包含小数:
string input = Console.ReadLine();
int iSallyAge;
double dSallyAge;
if (!Int32.TryParse(input, iSallyAge))
{
dSallyAge = Double.Parse(input);
}
答案 2 :(得分:-2)
您应该使用Double.TryParse
将用户输入解析为double
,然后测试该值以查看它是否等于62.0
。
double age;
if (double.TryParse(Console.ReadLine(), out age) && age == 62.0)
{
// age is 62.
// ...
}