【问题标题】:How to prevent type conflicts in c#如何防止c#中的类型冲突
【发布时间】:2017-11-22 06:55:22
【问题描述】:

我在使用 c# 中的类型时遇到问题。我在控制台应用程序上有一个 int 输入,我希望将一个(非数字字符)字符串输入放回我现有的但未图示的 do while 循环中,就像一个错误一样。我不想将非数字字符串值转换为 int,而是想保护我的对象不崩溃,并在出现不可接受的值(即字母字符串值)时将其返回到循环的开头。例如:

Console.WriteLine("Please input an odd number:");
int input1 = int.Parse(Console.ReadLine());
if (input1 % 2 == 0)
{
    Console.WriteLine("Please input an odd number.");
    //is even
}
else
{
    TotalOdd = TotalOdd + input1;
    TotalNumeral++;
    Console.WriteLine("Accepted.");
    //is odd
}

我希望将字符串输入视为“偶数”数。我知道这似乎是一个业余错误,但实际上我不知所措......感谢任何帮助。

【问题讨论】:

  • 我不知道你的问题是否正确。但是您可以将字符串转换为整数。转换.ToInt32()。由于用户能够提供任何输入,因此您可以先检查它是否为整数。 int.TryParse(input1, out value)
  • 您是在询问用户是否输入了偶数,您将如何返回并要求更多输入,直到他们输入奇数?
  • 我不确定您是否完全掌握字符串“是”的含义——所有输入都是字符串,直到您执行 int.parse 为止——但无论如何,也许您应该查看 int.tryparse。对不起,如果我在这里无可救药地错过了你的观点。
  • 使用TryParse

标签: c#


【解决方案1】:

下面的代码会循环直到输入一个奇数,然后input1会保存奇数;

  int input1 = 0;
    do {
        Console.WriteLine("Please input an odd number:");
        input1 = int.Parse(Console.ReadLine());
    } while (input1 % 2 == 0);

【讨论】:

    【解决方案2】:

    我通常在这些情况下使用int.TryParse(),只是为了确保输入的数字是一个有效的整数。如果转换成功,此方法返回true,并接受int out 参数,如果转换成功,该参数将设置为整数值。然后您可以在上面的答案中添加史蒂夫的检查:

    int input;
    
    do
    {
        Console.Write("Please input an odd number: ");
    } while (!int.TryParse(Console.ReadLine(), out input)
             || input % 2 == 0);
    

    【讨论】:

      【解决方案3】:

      用户输入总是作为字符串接收,你无法避免这种情况,因为用户可以输入键盘可以写的任何东西。所以你必须像你一样解析它,但你错过了两个错误:

      1. 字符串格式可能不正确(可能不是数字,即包括字母字符)
      2. 字符串可能是大于 Int32 最大值的数字

      所以您只需将以下内容添加到您的代码中:

           try {
              int input1 = Int32.Parse(Console.ReadLine());
           }
           catch (FormatException) {
              //not a number input
              continue;//iterate to the next
           }   
           catch (OverflowException) {
              //inform the user about the error...
              //if this often happens try parsing Int64.Parse
           } 
      

      您也可以使用 int.TryParse,它们给出相同的结果。检查这个问题What is better: int.TryParse or try { int.Parse() } catch

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多