限制控制台中的输入

时间:2011-07-17 12:19:19

标签: c# input console console-application readline

我正在制作一个迷宫游戏。如何在Console.Read()之后限制用户输入的字符数? 我需要限制它,以便如果用户输入一个非常长的字符串,它将覆盖我的迷宫。 如果你打算告诉我之后重写迷宫,我会说不。我不能。相信我,这将需要我另一个漫长的过程。我只想要一个简单的代码来限制输入。

这是显示问题的屏幕截图。你在屏幕上看到asdasjhasd....了吗?看看它是如何混淆迷宫的?我想限制用户可以输入的字符数,以便它不会到达迷宫。你们能告诉我使用什么代码吗?

解决

string str = string.Empty;
while (true)
{
    char c = Console.ReadKey(true).KeyChar;
    if (c == '\r')
        break;
    if (c == '\b' )
    {
        if (str != "")
        {
            str = str.Substring(0, str.Length - 1);
            Console.Write("\b \b");
        }
    }
    else if (str.Length < limit)
    {
        Console.Write(c);
        str += c;
    }
}

3 个答案:

答案 0 :(得分:5)

解决方法是改为使用Console.ReadKey

string str = string.Empty;
do
{
    char c = Console.ReadKey().KeyChar;
    if(c == '\n')
        break;

    str += c;
}while(str.Length < 7);

答案 1 :(得分:3)

刚刚测试了Anders答案的略微修改版本,它的确有效:

public static string ReadLimited(int limit)
{
    string str = string.Empty;
    while (str.Length < limit)
    {
        char c = Console.ReadKey().KeyChar;
        if (c == '\r')
            break;
        str += c;
    } 
    return str;
}

它不处理退格并自动接受任何达到限制的字符串,但除了这些问题之外,它还可以工作。

一个更好的版本解决了这些问题:

public static string ReadLimited(int limit)
{
    string str = string.Empty;
    while (true)
    {
        char c = Console.ReadKey(true).KeyChar;
        if (c == '\r')
            break;
        if (c == '\b' )
        {
            if (str != "")
            {
                str = str.Substring(0, str.Length - 1);
                Console.Write("\b \b");
            }
        }
        else if (str.Length < limit)
        {
            Console.Write(c);
            str += c;
        }
    }
    return str;
}

答案 2 :(得分:0)

使用Console.ReadKey(true); - 它会返回一个ConsoleKey,您可以将其添加到输入流中 如果您想将其转换为char,只需使用属性.KeyChar 因为intercept设置为true - 所以它根本不会在控制台窗口中显示该字符。