我有一个包含5个值的字符串数组,我希望程序循环,即使我没有为数组输入值。如果我拆分数组而不插入任何东西(按下.....(5次“。”以分割数组)然后它不会崩溃它只是循环。但如果我只是按回车,那么程序崩溃。< / p>
有没有办法修复循环,以便即使没有任何输入,它也不会崩溃? (如果你没有完成所有5个值,它也会崩溃。)
Net = Console.ReadLine();
string[] oktet = new string[5];
oktet = Net.Split('.', '/');
temp = oktet[0]; //inputs value of array in temp
NaN = int.TryParse(temp, out Net0);
temp = oktet[1];
NaN = int.TryParse(temp, out Net1);
temp = oktet[2];
NaN = int.TryParse(temp, out Net2);
temp = oktet[3];
NaN = int.TryParse(temp, out Net3);
temp = oktet[4];
NaN = int.TryParse(temp, out subnet);
}
while (!NaN | Net0 > 255 | Net0 < 0 | Net1 > 255 | Net1 < 0 | Net2 > 255 | Net2 < 0 | Net3 > 255 | Net3 < 0 | subnet > 32 | subnet < 0);
我知道这很业余,但是,嘿,我们来这里学习吧? :)
先谢谢!
答案 0 :(得分:2)
您可以尝试这样做:
string[] oktet = Net.Split('.', '/'); // size array according to input
if (oktet.Length != 5) continue; // reloop on bad input
这两行代码取代了这些代码:
string[] oktet = new string[5];
oktet = Net.Split('.', '/');
答案 1 :(得分:0)
如果可以,我会使用一些命令行选项库(除非这是你需要学习如何验证输入,解析等的功课)。参见NDesk.Options(http://www.ndesk.org/Options),也可以通过Nuget获得。有关必需选项,请参阅以下内容:How to enforce required command-line options with NDesk.Options?
答案 2 :(得分:0)
var userInput = Console.ReadLine();
var userInputSplit = userInput.Split('.', '/');
var numbers = userInputSplit.Select(word =>
{
int result;
if (byte.TryParse(word, out result))
return (byte?)result;
return (byte?)null; });
});
var inputComplete = number.Where(number => number.HasValue).Count() == 4;
答案 3 :(得分:0)
问题是您的变量oktet
不是5的数组,因为您在其中分配了其他内容。
string[] oktet = new string[5]; // Assigns an array of 5
oktet = Net.Split('.', '/'); //assigns the result of the split to the variable
因此,oktet
具有拆分的结果及其长度。
BTW,类以大写字母开头,变量应以小写字母开头 编码标准将使代码更具可读性,并将帮助您区分项目之间的区别。