C# 检查输入是否在数字范围内-在C中#

C# 检查输入是否在数字范围内-在C中#,c#,console,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

在控制台应用程序中,我试图检查多年的输入值是否在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();   
    }
}
while(!Int32.TryParse(numberOfYearsInput,out numberOfYears))
{
WriteLine(“不是有效的amount,请重试。”);
numberOfYearsInput=Console.ReadLine();
如果(numberOfYears<1 | | numberOfYears>10)
{
WriteLine(“不是有效的amount,请重试。”);
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();
    }
}
Console.WriteLine(“输入年份:”);
字符串numberOfYearsInput=Console.ReadLine();
而(!Int32.TryParse(numberOfYearsInput,out numberOfYears))
{
WriteLine(“不是有效的amount,请重试。”);
numberOfYearsInput=Console.ReadLine();

如果(numberOfYears>=1&&numberOfYears,它允许不正确输入的原因是因为您使用的是OR操作数(| |)

这基本上告诉编译器年份需要大于1或小于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;
}
publicstaticvoidmain()
{
int numberOfYears=GetYears();
Console.WriteLine(“干得好,years=“+numberOfYears”);
}
公共静态整年()
{
Console.WriteLine(“输入年份:”);
字符串inputYears=Console.ReadLine();
整数年;
而(!(Int32.TryParse(输入年份,输出年份))
||(年<1 | |年>10))
{
WriteLine(“不是有效的amount,大于1,小于10!”);
Console.WriteLine(“请输入新号码”);
inputYears=Console.ReadLine();
} 
回归年;
}

下面是一把小提琴,上面拿着一个在注释中要求的问题的解决方案:

在if语句中使用“| |”,但这是一个布尔或,需要使用“AND”语句。此外,较小/较大的运算符被反转,从而得到以下语句:

如果numberOfYears小于1或numberOfYears大于10

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

if (numberOfYears >= 1 && numberOfYears <= 10)
如果(numberOfYears>=1&&numberOfYears试试这个

        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();
            }
        }
int numberOfYears;
Console.WriteLine(“输入年份:”);
字符串numberOfYearsInput=Console.ReadLine();
布尔结果=假;
而(!结果)
{
if(Int32.TryParse(numberOfYearsInput,out numberOfYears))
{
如果(numberOfYears<1 | | numberOfYears>10)
{
WriteLine(“不是有效的amount,请重试。”);
numberOfYearsInput=Console.ReadLine();
}
其他的
{
结果=真;
控制台写入线(“正确编号”);
Console.ReadKey(true);
//请在这里输入您的代码
}
}
其他的
{
WriteLine(“不是有效的数字,请重试。”);
numberOfYearsInput=Console.ReadLine();
}
}

例如,我认为这类任务应该由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());
        }
    }

当(!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;
            }
        }
int numberOfYears;
while(true)
{
WriteLine(“不是有效的amount,请重试。”);
如果(!Int32.TryParse(Console.ReadLine(),out numberOfYears))
继续;

如果(numberOfYears>=1&&numberOfYears,问题是11是一个有效的整数,因此通过while循环`if(numberOfYears>1 | | numberOfYears<10){Console.WriteLine(“不是有效的amount,请重试”);numberOfYearsInput=Console.ReadLine()}`if将始终为false你在说什么?这怎么可能始终为false?我刚刚在VS中测试了它。只要变量大于1且小于10(如要求),它将为true,否则为false。检查此项。假设您的数字为5,然后if(false&&false)刚刚意识到我把等号设置错了。你是对的。编辑。谢谢,但它仍然允许11作为有效的输入。但是它仍然允许11作为有效的输入。但是我认为使用
goto
不是最佳实践。我也认为你应该避免
goto
。对不起,我认为问题来自初学者,现在我编辑了我的代码。谢谢Leon,但不幸的是,如果用户输入文本等,这将中断。这也是我的要求。请尝试secound选项(告诉用户不允许使用文本)
       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;
            }
        }