检查输入是在数字范围之间-in C#

时间:2017-06-28 10:53:30

标签: c# console

在控制台应用程序中,我试图检查年份的输入值是否介于1-10之间。

目前我还在使用以下方法检查输入是否为有效的int。

int numberOfYears;

Console.WriteLine("Enter the number of years:");
string numberOfYearsInput = Console.ReadLine();

while (!Int32.TryParse(numberOfYearsInput, out numberOfYears))
{
    Console.WriteLine("Not a valid ammount, try again.");

    numberOfYearsInput = Console.ReadLine();
}

我尝试将其更改为:

while (!Int32.TryParse(numberOfYearsInput, out numberOfYears))
{
    Console.WriteLine("Not a valid ammount, try again.");

    numberOfYearsInput = Console.ReadLine();

    if (numberOfYears < 1 || numberOfYears > 10)
    {
        Console.WriteLine("Not a valid ammount, try again.");

        numberOfYearsInput = Console.ReadLine();   
    }
}

但是,这允许不正确的输入值。我怎样才能将它结合起来才能发挥作用?

修改

已更改为以下并仍允许11,12等作为有效输入

Console.WriteLine("Enter the number of years:");
string numberOfYearsInput = Console.ReadLine();

while (!Int32.TryParse(numberOfYearsInput, out numberOfYears))
{
    Console.WriteLine("Not a valid ammount, try again.");

    numberOfYearsInput = Console.ReadLine();

    if (numberOfYears >= 1 && numberOfYears <= 10)
    {
         Console.WriteLine("Not a valid ammount, try again.");

         numberOfYearsInput = Console.ReadLine();
    }
}

5 个答案:

答案 0 :(得分:1)

在if语句中,您使用&#39; ||&#39;,但这是一个布尔OR,您需要使用&#39; AND&#39;声明。此外,您的较小/较大的运算符被反转,从而为您提供声明:

如果numberOfYears小于1或者numberOfYears大于10

如果要检查数字是否介于1和10之间,则该行应为:

if (numberOfYears >= 1 && numberOfYears <= 10)

'&&'是布尔'AND'运算符 '>=''<='分别大于/小于或等于。

因此它检查numberOfYears是否大于或等于1且小于或等于10.

答案 1 :(得分:0)

它允许错误输入的原因是因为您正在使用OR操作数(||)。

这基本上告诉编译器年份需要高于而不是1 OR 低于 10。

因此,如果你添加一个数字,比如说100,实际上被评估为true,因为它在if语句条件的左侧保持为true。 (高于1)。

所以改成它:

public static void Main()
{
    int numberOfYears = GetYears();

    Console.WriteLine("Good work, years = " + numberOfYears);
}

public static int GetYears()
{
    Console.WriteLine("Enter the number of years:");

    string inputYears = Console.ReadLine();
    int years;

    while(!(Int32.TryParse(inputYears, out years)) 
          || (years < 1  || years > 10))               
    {
        Console.WriteLine("Not a valid ammount, higher than 1, lower than 10!"); 
        Console.WriteLine("Please enter a new number");
        inputYears = Console.ReadLine(); 
    } 

    return years;
}

这是一个小提琴,在评论中提出解决问题的方法:Fiddle

答案 2 :(得分:0)

试试这个

        int numberOfYears;
        Console.WriteLine("Enter the number of years:");
        string numberOfYearsInput = Console.ReadLine();
        bool result = false;

        while (!result)
        {
            if (Int32.TryParse(numberOfYearsInput, out numberOfYears))
            {
                if (numberOfYears < 1 || numberOfYears > 10)
                {
                    Console.WriteLine("Not a valid ammount, try again.");

                    numberOfYearsInput = Console.ReadLine();
                }
                else
                {
                    result = true;
                    Console.WriteLine("Correct Number");
                    Console.ReadKey(true);
                    //Do your code here
                }
            }
            else
            {
                Console.WriteLine("Not a valid number, try again.");
                numberOfYearsInput = Console.ReadLine();
            }
        }

答案 3 :(得分:0)

我认为这类任务应该由oop标准制定,例如

    public static bool BetweenRanges(int a,int b,int number)
    {
        return (a <= number && number <= b);
    }
    static void Main(string[] args)
    {

        Console.WriteLine("Enter the number of years:");
        int numberOfYearsInput = Convert.ToInt16(Console.ReadLine());

        while (!BetweenRanges(1,10, numberOfYearsInput))
        {
            Console.WriteLine("Not a valid ammount, try again.");
            numberOfYearsInput = Convert.ToInt16(Console.ReadLine());
        }
    }

在这种情况下,您可以在更多地方使用BetweenRange并使用任何类型的数字。代码更清晰,更好理解可能在这种情况下并不重要,但它是最佳实践。 (当代码增长时,将很容易理解)

如果是文本输入,您可以检查它并告诉用户不允许使用文本:

    public static bool BetweenRanges(int a, int b, int number)
    {
        return (a <= number && number <= b);
    }
    static void Main(string[] args)
    {
        bool notValid = true;

        while (notValid)
        {
            try
            {
                Console.WriteLine("Enter the number of years:");
                int numberOfYearsInput = Convert.ToInt16(Console.ReadLine());

                while (!BetweenRanges(1, 10, numberOfYearsInput))
                {
                    Console.WriteLine("Not a valid ammount, try again.");
                    numberOfYearsInput = Convert.ToInt16(Console.ReadLine());
                }

                notValid = false;
            }
            catch
            {
                Console.WriteLine("Text is not valid ammount, try again.\n");
            }
        }
    }

答案 4 :(得分:0)

问题出现在这行代码while (!Int32.TryParse(numberOfYearsInput, out numberOfYears))中,因为它传递了所有有效数字,只有在输入不是有效数字时才进入循环。

尝试使用这段代码,让我知道它是否适合您

       int numberOfYears;

        while (true)
        {
            Console.WriteLine("Not a valid ammount, try again.");
            if (!Int32.TryParse(Console.ReadLine(), out numberOfYears))
                continue;

            if (numberOfYears >= 1 && numberOfYears <= 10)
            {
                Console.WriteLine("Valid value");
                break;
            }
        }