【问题标题】:Can my conditional statement be based off of data types? [duplicate]我的条件语句可以基于数据类型吗? [复制]
【发布时间】:2014-11-09 11:00:24
【问题描述】:
//capture input value for peak size and return 
public static int GetPeakSize()
{
    //declare variables, intitialize and parse after input
    int peak;
    Console.WriteLine("\nPlease enter the peak size (must be a number 1-10): ");
    peak = int.Parse(Console.ReadLine());

    //if user enter anything that is not inside the 1-10 range, default
    //to 3
    if (peak < 1 || peak > 10)
    {
        peak = 3;
    }

    return peak;
}

在上面的方法中,我只是尝试收集输入,解析它,如果输入不在 1-10 的范围内,则返回默认值 3。但我不只是验证数字输入,而是如果输入了除数值 1-10 之外的任何值,则希望返回默认值 3。因此,如果他们输入“四”而不是 4,我希望该值默认为 3。我希望我可以按照 if (value != int || value 10) 的方式做一些事情。 .....default = 3。我知道这不能完成,但它周围有吗?

【问题讨论】:

  • 为什么不直接禁止非数字输入?如果他们输入“四”,则会显示一条消息“请仅输入数字”。用户输入“四”并让程序静默假设 3 似乎令人困惑。
  • @eddie_cat 是的,我知道,不过这是作业要求。
  • 明白了,只是觉得值得注意。

标签: c# .net if-statement


【解决方案1】:

您可能想改用TryParse

    int peak;
    Console.WriteLine("\nPlease enter the peak size (must be a number 1-10): ");
    if (!int.TryParse(Console.ReadLine(), out peak) || peak < 1 || peak > 10)
    {
        peak = 3;
    }

上面的代码将尝试将输入解析为int——如果它不能,或者如果解析的值超出你的范围限制,它会在继续之前将peak覆盖为3

编辑:错过了范围限制。

【讨论】:

  • 非常好。我很高兴就这么简单。感谢您的回答。
【解决方案2】:

使用int.TryParse。如果输入不是数字,int.Parse 将抛出。

int peak = 0;
bool parseSuccess = int.TryParse(input, out peak);

if (!parseSuccess || peak < 1 || peak > 10)
{

}

如果输入无效,int.TryParse 将返回 false,如果有效,则解析后的值将包含在“out”参数中(本例中为peak)。

【讨论】:

  • 我喜欢这个作为科里答案的替代品。将使用任何一个。谢谢。
猜你喜欢
  • 1970-01-01
  • 2020-10-23
  • 1970-01-01
  • 2021-08-03
  • 2021-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-18
相关资源
最近更新 更多