我试图限制控制台的输入,以便在无效输入上添加错误消息。输入必须是9个数字(编辑:在100000000 - 999999999范围内)才能生效。我遇到的问题是正确显示错误以及让程序继续运行。该程序设置为使用sin作为整数。
int sin;
Console.Write("Please enter sin number: ");
sin = int.Parse(Console.ReadLine());
我尝试使用下面的这个,但得到无休止的错误消息以及所有输入上的无效输入
var digits = Console.ReadLine();
while (digits.Length > 9 || digits.Length < 9)
{
Console.WriteLine("Error invalid entry");
}
如何让程序检查数字的长度以及使用sin作为int值继续程序,以便程序的其余部分可以正常工作?
您的Console.ReadLine()
位于循环之外,因此一旦您收到错误消息,用户就无法输入新值;错误消息只是在无限循环中显示。试试这个 - 一旦你因为良好的输入而安全地离开循环,sin
变量将具有SIN的整数值:
int sin = 0;
while (true) {
String digits = Console.ReadLine();
if (digits.Length == 9 && Int32.TryParse(digits, out sin)) {
if (sin >= 100000000) {
break;
}
}
Console.WriteLine("Error invalid entry");
}
您只需要进行一系列三项检查:
int.TryParse(string, out int)
有了它,您可以尝试以下方法:
using System;
public class Program
{
public static void Main()
{
int sin = 0;
Console.Write("Please enter sin number: ");
string input = Console.ReadLine();
while(input.Length != 9 ||
!int.TryParse(input, out sin) ||
sin < 100000000)
{
Console.WriteLine("Error invalid entry!");
Console.WriteLine("");
Console.Write("Please enter sin number: ");
input = Console.ReadLine();
}
Console.WriteLine("Entered number: {0}", sin);
}
}
结果:
Please enter sin number: 012345678
Error invalid entry!
Please enter sin number: 0123456789
Error invalid entry!
Please enter sin number: asdf
Error invalid entry!
Please enter sin number: 999999999
Entered number: 999999999
请参阅此处的工作示例... https://dotnetfiddle.net/eHNy2O
你需要再读一遍。你只是打印出现错误,但没有提示用新的sin = int.Parse(Console.ReadLine());
获得新的输入
以下应该工作(编辑,欢呼本)
int sin;
Console.Write("Please enter sin number: ");
string input = Console.ReadLine();
bool parse_ok= int.TryParse(input,out sin);
while (!parse_ok || digits.Length != 9 || sin < 100000000 )
{
Console.WriteLine("Error invalid entry");
Console.Write("Please enter sin number: ");
input = Console.ReadLine();
parse_ok= int.TryParse(input,out sin);
} ;
这应该工作
var digits = int.Parse(Console.ReadLine());
while (digits.Length > 9 || digits.Length < 9)
{
Console.WriteLine("Error invalid entry");
// then add something like this
Console.Write("Enter a number: ");
digits = int.Parse(Console.ReadLine());
}