【问题标题】:Check if user input is a number检查用户输入是否为数字
【发布时间】:2023-03-27 21:58:01
【问题描述】:

我想检查用户输入的是否是数字。如果是,我希望该功能继续运行,否则想提醒他并再次运行它。

Console.WriteLine(String.Concat("choose your action" ,Environment.NewLine ,
                                "1.Deposit", Environment.NewLine,
                                "2.Withdraw", Environment.NewLine,
                                "3.CheckAccount"));
string c = Console.ReadLine();
int value = Convert.ToInt32(c);

if (value==char.IsLetterOrDigit(value)) //<----- no good why?
{
    switch (value)
    {
        case 1:
            Deposit();
            return;
        case 2:
            Withdraw();
            return;
        case 3:
            CheckAccount();
            return;
    }
}

【问题讨论】:

  • 无需使用String.Concat mate!有一个运算符,即字符串连接运算符+,它被优化为对String.Concat的调用。

标签: c#


【解决方案1】:

只需使用:

string c = Console.ReadLine();
int value;
if (int.TryParse(c, out value)) { /*Operate*/ }

编辑:使代码适应作者的评论:

if (int.TryParse(c, out value) && value >= 1 && value <= 3) { /*Operate*/ }

【讨论】:

  • 如何添加检查以查看数字是否在 1-3 之间且不是浮点数或双精度数?
  • @user1942298 int.TryParse 将返回false,以防数字不是整数。我已经编辑了我的帖子以适应您的第二个要求。
  • @Mir:你为什么在这里使用out?可以省略吗?
  • @Destructor out 是您将在解析(将字符串转换为 int)成功时使用的输出。
【解决方案2】:

int 值 = Convert.ToInt32(c); 如果 c 不是仅由整数组成的字符串,这将失败。 使用 try catch 来处理这种情况。

【讨论】:

  • 我会使用TryParse,它要快得多。我还没有在 .NET 上测试过,但是 Mono 给了我 649 毫秒的时间和 47 毫秒的 TryParse 测试时间:pastebin.com/HfLjqTqg
猜你喜欢
  • 2019-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-30
  • 1970-01-01
  • 2018-08-18
  • 2022-06-17
相关资源
最近更新 更多