Ограничение ввода в консоли - PullRequest
1 голос
/ 17 июля 2011

Я играю в лабиринт. Как я могу ограничить количество символов, которые пользователь будет вводить после 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 ]

5 голосов
/ 17 июля 2011

Обходной путь должен использовать Console.ReadKey вместо:

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

    str += c;
}while(str.Length < 7);
3 голосов
/ 17 июля 2011

Только что протестировал слегка измененную версию ответа Андерса, и она работает:

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;
}
0 голосов
/ 17 июля 2011

Использовать Console.ReadKey(true); - он вернет ConsoleKey, который вы можете добавить в ваш поток ввода.
Если вы хотите преобразовать его в char, просто используйте свойство .KeyChar.
Поскольку intercept имеет значение true - он не будет отображать символ в окне консоли вообще.

...