C# 检查输入是否在数字范围内-在C中#
在控制台应用程序中,我试图检查多年的输入值是否在1-10之间 目前,我还使用以下方法检查输入是否为有效的intC# 检查输入是否在数字范围内-在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
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;
}
}