C#ReadLine问题

时间:2009-12-14 18:48:54

标签: c# readline

我想要做的是当使用我的程序的人在没有任何内容的情况下输入时,这不会导致错误,这是程序的一部分:

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.

及其的不同组合&gt;。并且默认不适用于

我希望有人可以帮我解决问题&gt;。&lt;

6 个答案:

答案 0 :(得分:10)

检查Int16.TryParse方法。

如果用户输入不是Int16允许的范围内的数字(负32768到正32767),这将允许您退出程序或执行其他操作。

示例代码可以在MSDN条目(Int16.TryParse Method)上找到。

答案 1 :(得分:4)

首先,将Console.ReadLine()设置为变量。 然后检查您设置的变量是否为空或为空。另外,我建议使用Int16类的TryParse方法,因为它返回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:
                    ...
            }
    }
}

答案 2 :(得分:1)

我认为你想要的是int.Parse(...)

答案 3 :(得分:0)

您可能会考虑使用try catch语句进行错误处理......

答案 4 :(得分:0)

的TryParse:

string str;
short val;
while(!short.TryParse(str=Console.ReadLine(), out val))
{
    Console.WriteLine("Cant do that  >.>");
}

答案 5 :(得分:0)

为了获得整数,我通常使用像这样的递归函数

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();
     }
}