【问题标题】:Limiting the input in the Console限制控制台中的输入
【发布时间】:2011-10-07 02:45:58
【问题描述】:

我正在做一个迷宫游戏。如何限制用户在 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;
    }
}

【问题讨论】:

  • 请显示您的代码是如何从控制台读取的。

标签: c# input console console-application readline


【解决方案1】:

刚刚测试了安德斯答案的略微修改版本,它可以工作:

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

【讨论】:

  • 我尝试稍微修改一下这段代码。即使字符串已经为空,它仍然会退格。我将 CW 更改为 CW(" \b"); and else if (str...) to just else str += c;
  • 即使字符串为空,它仍然会退格。
  • 成功了!太感谢了! :3
  • while(true) 是一个无限循环,我使用break 退出循环。风格不好,但我懒得改进它。 str.Substring(0, str.Length-1) 返回一个没有最后一个字符的新字符串。
  • @Reinan Contawi - 如果它对您有用,您应该考虑将此答案标记为已接受(单击答案左侧的勾号)
【解决方案2】:

解决方法是改用Console.ReadKey

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

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

【讨论】:

  • \n 有效吗?在这种情况下,返回键不是对应于\r 吗?你至少应该支持退格。并且自动接受达到最大长度的输入通常是一个坏主意,它应该停止接受输入但仍然允许更正以前的输入。
  • 然后你可以解释你在做什么以及你所说的不工作是什么意思。您还没有发布您尝试使用它的代码。将\n 替换为\rstring.empty 替换为string.Empty 后,这看起来是正确的
  • 如果您没有就您的问题发布足够的信息,我们将无法为您提供帮助。
  • @Reinan Contawi,你不想被帮助。如果您不显示源代码,您希望人们如何帮助您?说不工作很容易。什么不起作用,到目前为止您尝试过什么,您的代码看起来如何?请提供更多信息,您将获得帮助。
  • 关闭重复的问题是正确的做法。没有理由抱怨马修。
【解决方案3】:

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

【讨论】:

  • 我用了cheat = Console.ReadKey(true);它不工作。怎么了?我需要声明一个名为 true 的布尔值吗?
猜你喜欢
  • 2014-04-14
  • 2012-02-29
  • 1970-01-01
  • 2022-06-14
  • 1970-01-01
  • 1970-01-01
  • 2011-04-02
  • 1970-01-01
  • 2021-09-21
相关资源
最近更新 更多