C # Сбой, если нет ввода для строкового массива - PullRequest
2 голосов
/ 21 марта 2012

У меня есть строковый массив с 5 значениями, я хочу, чтобы программа зациклилась, хотя я не ввожу значение для массивов. Если я разделяю массивы, ничего не вставляя (нажимая ..... (5 раз ".", Чтобы разбить массив), он не падает, он просто зацикливается. Но если я просто нажимаю Enter, то программа падает.

Есть ли способ исправить цикл так, чтобы даже при отсутствии входных данных он не падал? (Также происходит сбой, если вы не заполните все 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 ]

2 голосов
/ 21 марта 2012

Вы можете попробовать сделать что-то вроде этого:

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('.', '/'); 
0 голосов
/ 21 марта 2012

Проблема в том, что ваша переменная 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 is имеет результатsplit и его длина.

Кстати, классы начинаются с заглавной буквы, а переменные должны начинаться с маленькой буквы.
Стандарты кодирования сделают код более читабельным и помогут понять разницумежду элементами.

0 голосов
/ 21 марта 2012
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;
0 голосов
/ 21 марта 2012

Я бы просто использовал библиотеку опций командной строки, если бы вы могли (если это не домашняя работа, где вам нужно научиться проверять ввод, анализировать и т. Д.).См. Также NDesk.Options (http://www.ndesk.org/Options),, доступный через Nuget. Необходимые параметры см. В следующих разделах: Как применить требуемые параметры командной строки в NDesk.Options?

...