簡體   English   中英

檢查輸入在數字范圍之間-in C#

[英]Check input is between range of numbers -in C#

在控制台應用程序中,我試圖檢查幾年的輸入值是否在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();
    }
}

在if語句中,您使用“ ||”,但這是一個布爾OR,您需要使用“ AND”語句。 此外,您的較小/較大的運算符是倒數的,從而使您得到以下聲明:

如果numberOfYears小於1或numberOfYears大於10

如果要檢查數字是否在1到10之間,則該行應為:

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

'&&'是布爾值'AND'運算符,分別是'>=''<='大於/小於或等於。

因此,它檢查numberOfYears是否大於或等於1且小於或等於10。

允許輸入錯誤的原因是因為您使用的是OR操作數(||)。

這主要是告訴,今年需要比10 高於 1 更低的編譯器。

因此,如果您添加一個數字(例如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;
}

這是一個小提琴,提供注釋中要求的問題的解決方案: 小提琴

嘗試這個

        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();
            }
        }

我認為這類任務應該由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");
            }
        }
    }

問題出在這行代碼中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;
            }
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM