按Enter键,C#控制台时出错

时间:2013-11-08 17:43:54

标签: c# error-handling key enter

我的代码要求用户输入一个字母(将string转换为char),但是当按 Enter 键作为输入时,代码会崩溃。

我没有提出任何条件向用户发送错误消息,以便不在输入处按 Enter 键并仅输入字母。

这是我正在努力的部分:

public static char GetLetter(string prompt)
{
    char result;

    Console.Write("\n\t" + prompt + ":  ");
    result = Convert.ToChar(Console.ReadLine());

    if(result == '!' || result == '@' || result == '#'  || result == '$' || result == '%'  )
    // we can keep going with all the unwanted characters and numbers 
    {
        Console.WriteLine("\n\t NO MATCH ! \n\t ,please try again using letters only , ");
        result = GetLetter(prompt);
        return result;
    }

    return result;
}

3 个答案:

答案 0 :(得分:3)

您输入时收到错误,因为您收到一个空字符串,因此无法将其转换为char。

我会建议你这样做:

char result;
string input = Console.ReadLine();

if (char.TryParse(input, out result))
{
    //The input is a char - write your code here.
}

//The input is not a char.

答案 1 :(得分:2)

您可以使用Console.ReadKey()功能阅读下面的字符:

public static char GetLetter(string prompt)
{
    char result;

    Console.Write("\n\t" + prompt + ":  ");
    result = Console.ReadKey().KeyChar;

    if (result == '!' || result == '@' || result == '#' || result == '$' || result == '%')
    // we can keep going with all the unwanted characters and numbers 
    {
        Console.WriteLine("\n\t NO MATCH ! \n\t ,please try again using letters only , ");
        result = GetLetter(prompt);
        return result;
    }

    return result;
}

答案 2 :(得分:1)

Console.ReadLine()将返回string,而不是char,而是使用Console.Read。查看来自MSDN的details