[英]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.