我正在制作一个迷宫游戏。如何在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;
}
}
答案 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 - 所以它根本不会在控制台窗口中显示该字符。