【问题标题】:how to make user input int null value c#如何使用户输入int null值c#
【发布时间】:2018-10-17 16:21:06
【问题描述】:

我正在尝试制作一个接受数字并将其打印在屏幕上的程序,但如果用户按下输入代码,则要求用户再次输入数字,但它却显示异常

Enter_No:
                 Console.WriteLine("enter number");
                 int? n = Convert.ToInt32(Console.ReadLine());
                 if (n == (int?)null)
                 {
                     goto Enter_No;
                 }
                 else
                 {
                     Console.WriteLine(n);
                 } 

【问题讨论】:

  • 你得到了什么异常,它说异常发生在哪一行?您需要检查该信息。
  • 整数? n = Convert.ToInt32(Console.ReadLine());
  • 输入字符串格式不正确
  • 该错误是因为您试图将空字符串解析为数字。永远不要假设用户输入数据是干净的。此外,对于 int? 类型(和其他值类型(例如结构)),您应该使用 x.HasValue 而不是与 null 进行比较。

标签: c# null integer


【解决方案1】:

使用int.TryParse:

int? num = null;
while(!num.HasValue)
{
    Console.WriteLine("Please enter an integer:");
    num = int.TryParse(Console.ReadLine(), out int i) ? i : new int?();
}

Console.WriteLine("Entered integer: " + num.Value);

【讨论】:

    【解决方案2】:

    Tim 的解决方案非常紧凑。这就是您的尝试失败的原因。

    From MSDN,Convert.ToInt32() 在以下情况下抛出 FormatException:

    值不包含可选符号后跟数字序列(0 到 9)。

    首选方法是int.TryParse(),因为如果它无法解析整数而不是抛出异常,它会返回 false。

    虽然 C# 支持 goto 关键字,但在少数情况下(取决于您询问的对象)它是流控制的最佳选择。 Tim 的 while 循环是一个很好的方法。

    【讨论】:

      【解决方案3】:

      首先,不要使用 Go To:

      第二:检查你的数据并使用tryparse:

              bool success = false;
              do
              {
                  Console.WriteLine("enter number");
                  var n = Console.ReadLine();
                  if (n == null)
                  {
                      // goto Enter_No;
                  }
                  else
                  {
                      int typedNum;
                      success = int.TryParse(n, out typedNum);
                      Console.WriteLine(typedNum);                    
                  }
              } while (!success);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-05-22
        • 2014-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-22
        相关资源
        最近更新 更多