使用If和else语句确定用户输入的数字是否在范围内。 C#

时间:2018-02-10 09:37:24

标签: c#

我在C#中编写程序,提示用户输入一年中某个月的数字。一旦他们输入了一个号码,它就应该回复一条错误消息,说明它无效或者说该号码有效的消息。现在它正确地提示用户,但它没有吐出我想要它的消息,它只是结束。这是代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MonthChecky
{
    class Program
    {
        static void Main(string[] args)
        {
            const int LowNum = 1;
            const int HighNum = 12;

            Console.Write("Please enter a valid number for a month: ");
            String UserIn = Console.ReadLine();


            if (Convert.ToInt32(UserIn) < LowNum)
                if (Convert.ToInt32(UserIn) > HighNum)

            Console.WriteLine("That is an invalid number, try entering a number between 1 and 12");

            else
                Console.WriteLine("That is a valid number for a month");
        }
    }
}

有什么建议吗?

5 个答案:

答案 0 :(得分:1)

你的逻辑是完全错误的。这是你的代码正确括号:

if (Convert.ToInt32(UserIn) < LowNum) {
    if (Convert.ToInt32(UserIn) > HighNum) {
        Console.WriteLine("That is an invalid number, try entering a number between 1 and 12");
    } else {
        Console.WriteLine("That is a valid number for a month");
    }
} // No "else"

此代码仅在输入的数字低于1时打印任何。此外,它永远不会打印"That is an invalid number",因为数字必须高于12 同时低于1,这是不可能的。

您需要更改代码才能使用&&一次评估这两个条件。使用int.TryParse检查用户输入的有效性。

int n;
if (int.TryParse(UserIn, out n) && n >= LowNum && n <= HighNum) {
    Console.WriteLine("That is a valid number for a month");
} else {
    Console.WriteLine("That is an invalid number, try entering a number between 1 and 12");
}

答案 1 :(得分:0)

正如您在评论中指出的那样,您想要使用

Int.Parse(input);

验证他们是否输入了一个数字,而不是Convert.ToInt32(输入),因为如果它不是数字,它将会抛出。

最后,添加一个

Console.ReadLine();

最后阻止程序关闭

所以:

var userIn = Console.Readline();
var number = 0;
if (!Int.TryParse(userIn, out number)){
    Exit;
}

if (number < LowNum || number > highNum)
{
    Console.WriteLine("That is an invalid number, try entering a number between 1 and 12");
}
else 
{
    Console.WriteLine("That is a valid number for a month");
}

Console.ReadLine();

答案 2 :(得分:0)

Or布尔运算符,用于修复和简化if语句,ReadLine调用不会自动关闭控制台窗口,以及int.Parse用法。

if (int.Parse(UserIn) < LowNum || int.Parse(UserIn) > HighNum) // "or" operator
    Console.WriteLine("That is an invalid number, try entering a number between 1 and 12");
else
    Console.WriteLine("That is a valid number for a month");

Console.ReadLine();

答案 3 :(得分:0)

代码的逻辑很差。您只想检查输入的数字是否在指定的范围内。您的代码永远不会检查有效的范围。

if (Convert.ToInt32(UserIn) < LowNum)
    if (Convert.ToInt32(UserIn) > HighNum)

        Console.WriteLine("That is an invalid number, try entering a number between 1 and 12");

        else
            Console.WriteLine("That is a valid number for a month");

所以,它应该是这样的:

if ((Convert.ToInt32(UserIn) < LowNum || (Convert.ToInt32(UserIn) > HighNum)
{
    Console.WriteLine("That is an invalid number, try entering a number between 1 and 12");
}
else
{
    Console.WriteLine("That is a valid number for a month");
}

Console.ReadLine()

答案 4 :(得分:0)

您需要检查输入是否为非负数字以及整数(不是字符串,bool)。

  int intValue;
            bool inputSuccess = int.TryParse(UserIn, out intValue);
             if(inputSuccess)
                 {
                     if (intValue > HighNum)
                      {
                   Console.WriteLine("That is an invalid number, try entering a number between 1 and 12");
                      } 
                 else if(intValue<LowNum )
                       {
                        Console.WriteLine("That is an invalid number, try entering a number between 1 and 12");
                       }
                        else
                      {
                           Console.WriteLine("That is a valid number for a month");
                      }
                 }
            else
               {
        Console.WriteLine("Please enter digits");
              }