C# 带有输入验证的奇数/偶数

C# 带有输入验证的奇数/偶数,c#,exception,input,C#,Exception,Input,我试图制作一个简单的奇数/偶数程序,但我想比较用户输入的数字。当我输入任何不是数字的符号时,我会得到第二个异常,但当我只按enter键,即不给出任何值时,我仍然会得到第二个异常,除了第一个,当我不给出任何值时,我试图得到第一个。我的问题是,当我按下enter键时,如何获取第一个异常文本,因为现在我只获取第二个异常文本,不管我输入什么 Console.WriteLine("Enter a number: "); try { var numbe

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

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.");
        }

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

你觉得乔治·亚历山大是怎么建议的

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

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

你觉得乔治·亚历山大是怎么建议的

    string s = Console.ReadLine(); 
if(s == "")
{ Console.WriteLine("You need
    to enter some value."); }
试试这个:

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.");
    }
}
试试这个:

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.");
    }
}

如果您只需按enter键作为
string,则应捕获
FormatException
。空的
将被传递到
int.Parse
<仅当传递给
int.Parse
的输入值为
null
时,才会引发code>ArgumentNullException
。以下示例说明了如何执行此操作,并根据输入的值编写不同的消息:

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.");
}

如果您只需按enter键作为
string,则应捕获
FormatException
。空的
将被传递到
int.Parse
<仅当传递给
int.Parse
的输入值为
null
时,才会引发code>ArgumentNullException
。以下示例说明了如何执行此操作,并根据输入的值编写不同的消息:

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.");
}


你的问题是什么?顺便说一句,我建议你们阅读输入行,检查它是否为空,然后尝试解析它。请更明确一些。抱歉,我不够清楚。我想在按下enter键时显示第一个异常文本,因为现在我总是会看到第二个异常文本。Console.ReadLine在输入来自键盘时不会返回null“如果标准输入设备是键盘,ReadLine方法会一直阻止,直到用户按下enter键。”你的问题是什么?顺便说一句,我建议你们阅读输入行,检查它是否为空,然后尝试解析它。请更明确一些。抱歉,我不够清楚。我想在按下enter键时显示第一个异常文本,因为现在我总是会看到第二个异常文本。当输入来自键盘时,Console.ReadLine不会返回null“如果标准输入设备是键盘,ReadLine方法会一直阻止,直到用户按下enter键。”那个么,我怎样才能编辑它以使第一个异常工作呢?不知何故使用iSNullOrEmpty?你能详细说明一下吗?Camilo Terevinto如果I中还有一个大写字母I,如果I&;I没有错的话,这是无效的C##39;对不起,移动设备中的自动大写,can&#39;我没办法,但肯定能让@kirodge明白这一点。我编辑了它是的,反正我收到了消息。只是为了完整性,因为你们要求卡米洛详细说明。那个么我怎样才能编辑它,让第一个异常工作呢?不知何故使用iSNullOrEmpty?你能详细说明一下吗?Camilo Terevinto如果I中还有一个大写字母I,如果I&;I没有错的话,这是无效的C##39;对不起,移动设备中的自动大写,can&#39;我没办法,但肯定能让@kirodge明白这一点。我编辑了它是的,反正我收到了消息。只是为了完整性,因为你要求卡米洛详细说明。这确实有效,谢谢你,但我想做例外。@MarkWest你知道
try/cath
构造比上面的代码慢吗?如果你知道并且想用它,那是你的选择。我现在真的不担心速度。我只是想学习不同的方法。@GeorgeAlexandria这是一个无效的说法。Try/catch绝不比任何东西都慢。引发异常的代价很高,是的,但是try/catch块本身不会增加任何性能影响。@CamiloTerevinto您想告诉我,
。在IL中,try
部分不会比比较两个值的
ceq
命令慢吗?这肯定有效,谢谢您,但是我想做一些例外。@MarkWest你知道
try/cath
构造比上面的代码慢吗?如果你知道并且想用它,那是你的选择。我现在真的不担心速度。我只是想学习不同的方法。@GeorgeAlexandria这是一个无效的说法。Try/catch绝不比任何东西都慢。引发异常的代价很高,是的,但是try/catch块本身不会增加任何性能影响。@CamiloTerevinto您想告诉我,IL中的try
部分不会比比较两个值的
ceq
命令慢吗?是的,“FormatException”现在可以捕获这两个字母,而我只需按enter键。那就行了,谢谢!有没有一种方法可以显示两种不同的异常,一种是当用户输入的不是数字的内容时,另一种是当按下enter键时?就是这样,谢谢!我不知道为什么我的问题被否决。@MarkWest您可以显示不同的消息,但要抛出不同的异常,您应该实现自己的
Parse
方法,并在验证传递的值时在该方法中抛出不同的异常
int.Parse
方法没有为所需的大小写提供不同的异常。是的,“FormatException”现在捕获两个字母,而我只需按enter键。那就行了,谢谢!有没有一种方法可以显示两种不同的异常,一种是当用户输入的不是数字的内容时,另一种是当按下enter键时?就是这样,谢谢!我不知道为什么我的问题被否决。@MarkWest您可以显示不同的消息,但要抛出不同的异常,您应该实现自己的
Parse
方法