C # ReadLine проблема - PullRequest
       22

C # ReadLine проблема

1 голос
/ 14 декабря 2009

что я хочу сделать, так это то, что когда люди, использующие мою программу, нажимают ввод без чего-либо там, это не вызывает ошибку, вот часть программы:

Console.WriteLine("4.-Ya no quiero jugar >.<");
int opc = Convert.ToInt16(Console.ReadLine());

switch (opc)
{
    case 1:
        Console.WriteLine("omg");
        break;

    case 2:
        Console.WriteLine("wtf");
        break;

    default:
        Console.WriteLine("Cant do that  >.>");
        Console.ReadKey();
        break;

    etc.
}

Дело в том, что я использую целые числа, я пытался сделать это

string opc1=console.readline();

if (opc =="")
{
    console.writeline("nope,try again");
}
else
{ // Brace was omitted in original - Jon
    int opc = Convert.ToInt16(Console.ReadLine());

    switch (opc)

    blah blah.

и различные его комбинации>. <И по умолчанию не работает для этого </p>

Я надеюсь, что кто-нибудь поможет мне решить ее.> <</p>

Ответы [ 6 ]

10 голосов
/ 14 декабря 2009

Проверьте метод Int16.TryParse.

Это позволит вам выйти из программы или выполнить другое действие, если пользовательский ввод не является числом в диапазоне, разрешенном Int16 (от отрицательного значения 32768 до положительного значения 32767).

Пример кода можно найти в записи MSDN ( Int16.TryParse Method ).

4 голосов
/ 14 декабря 2009

Во-первых, установите Console.ReadLine() в переменную. Затем проверьте, не является ли установленная вами переменная пустой или нулевой. Кроме того, я бы рекомендовал использовать метод TryParse класса Int16, потому что он возвращает true или false в зависимости от того, было ли преобразование успешным.

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

String lineIn = Console.ReadLine();

if (!String.IsNullOrEmpty(lineIn))
{
    Int16 myNum;
    if (Int16.TryParse(lineIn , out myNum))
    {
            switch(myNum)
            {
                    case 1:
                    ...
                    default:
                    ...
            }
    }
}
1 голос
/ 14 декабря 2009

Я думаю, что вы хотите int.Parse (...)

0 голосов
/ 14 декабря 2009

Для получения целого числа я обычно использую рекурсивную функцию, подобную этой

private int GetInt()
{
     try
     {
         return int.parse(Console.Readline().Trim());
     } 
      catch (exception e) 
     {
         Console.WriteLine(string.format("{0} Please try again", e.message);
         return GetInt();
     }
}
0 голосов
/ 14 декабря 2009

TryParse:

string str;
short val;
while(!short.TryParse(str=Console.ReadLine(), out val))
{
    Console.WriteLine("Cant do that  >.>");
}
0 голосов
/ 14 декабря 2009

вы можете использовать try catch для обработки ошибок ...

...