2017-07-02 68 views
0

我正在尝试制作一个简单的奇数/偶数编程,但我想比较用户输入的编号。当我输入任何不是数字的符号时,我会得到第二个异常,但是当我按下输入即,没有给出任何价值,除了第一个,我仍然得到第二个,当我不给任何价值时,我试图得到第一个。我的问题是当我按下回车键时如何获得第一个例外文本,因为现在我只输入第二个,不管输入什么。奇数/偶数验证输入

Console.WriteLine("Enter a number: "); 
     try 
     { 
      var number = int.Parse(Console.ReadLine()); 
      if (number % 2 == 0) 
       Console.WriteLine($"Entered number {number} is even."); 

      else 
       Console.WriteLine($"Entered number {number} is odd."); 
     } 
     catch (ArgumentNullException) 
     { 
      Console.WriteLine("You need to enter some value."); 
     } 

     catch (Exception) 
     { 
      Console.WriteLine("You need to enter a number."); 
     } 
+0

你的问题是什么?顺便说一下,我建议你阅读输入行,检查它是不是空的,然后尝试解析它 –

+0

请更明确 –

+0

对不起,我不够清楚。当我按下回车键时,我想获得第一个例外文本,因为现在我总是得到第二个。 –

回答

2

如果您只是按下输入,您应该赶上FormatException,因为string.Empty正在传递给int.ParseArgumentNullException只在传递给int.Parse的输入值为null时才被抛出。下面是例子,你如何做到这一点,并根据输入值编写不同的消息:

Console.WriteLine("Enter a number: "); 
string input = Console.ReadLine(); 
try 
{ 
    var number = int.Parse(input); 
    if (number % 2 == 0) 
     Console.WriteLine($"Entered number {number} is even."); 

    else 
     Console.WriteLine($"Entered number {number} is odd."); 
} 
catch (FormatException exc) 
{ 
    if(string.IsNullOrEmpty(input)) 
    { 
     Console.WriteLine("You need to enter some value."); 
    } 
    else 
    { 
     Console.WriteLine("You need to enter a number."); 
    } 

} 

catch (Exception exc) 
{ 
    Console.WriteLine("You need to enter a number."); 
} 
+0

是的,'FormatException'现在捕获两个字母,当我只是按下输入。那会的,谢谢!有没有办法显示2种不同的例外情况,一种是当用户输入的不是数字,另一种是按下输入时的另一种例外。 –

+0

@MarkWest看看更新后的答案 –

+0

就是这样,谢谢!我不知道为什么我的问题被降低了。 –

0

如果不输入任何值,该值不是但“”(空字符串),这就是为什么它不是一个ArgumentNullException

做乔治·亚历山大如何建议

string s = Console.ReadLine(); 
if(s == "") 
{ Console.WriteLine("You need 
    to enter some value."); } 
+0

那么,如何编辑它以获得第一个异常工作?以某种方式使用iSNullOrEmpty? –

+0

已编辑的代码@Mark west –

+0

您的代码远没有效c# –

2

试试这个:

var str = Console.ReadLine(); 
if (string.IsNullOrEmpty(str)) 
{ 
    Console.WriteLine("You need to enter some value."); 
} 
else 
{ 
    int number; 
    if (!int.TryParse(str, out number)) 
    { 
     Console.WriteLine("You need to enter a number."); 
    } 
    else 
    { 
     if (number % 2 == 0) 
      Console.WriteLine($"Entered number {number} is even."); 
     else 
      Console.WriteLine($"Entered number {number} is odd."); 
    } 
} 
+0

这绝对有效,并感谢你,但我想用例外做到这一点。 –

+0

@MarkWest你知道'try/cath'构造比代码更慢吗? 如果你知道它并且无论如何都想使用它,那是你的选择。 –

+0

我现在不担心速度。我只是想学习不同的方法。 –