如果没有字符串数组的输入,则C#崩溃

时间:2012-03-21 16:59:56

标签: c# parameters string-parsing

我有一个包含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);

我知道这很业余,但是,嘿,我们来这里学习吧? :)

先谢谢!

4 个答案:

答案 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,类以大写字母开头,变量应以小写字母开头 编码标准将使代码更具可读性,并将帮助您区分项目之间的区别。