我正在尝试制作一个以标题屏幕开头的简单控制台游戏。用户输入“N”表示新游戏,“L”表示加载游戏,“E”表示退出。我将此设置为开关,但我需要知道如何使程序忽略除上述键之外的任何输入。我用Google搜索了这个问题,但未找到答案。如果可以,请帮忙。
我没有看到发布代码的重点,因为10行简单的开关可能不会对解决问题非常有帮助。此外,如果有一种比开关更容易/更有效的方式,我很想知道。
感谢。
答案 0 :(得分:3)
您可以使用default:
statement来处理其他(未知)案例:
switch(inputString.ToLower())
{
case "n":
// Handle new
break;
//.. handle known cases
default:
Console.WriteLine("Unknown option chosen. Please enter valid option:");
// Re-read values, etc?
break;
}
在您的其他一个案例中未指定的任何内容都将属于default
案例,然后您可以使用该案例来提示有效输入。
答案 1 :(得分:1)
如果您想要忽略除有效键之外的所有键,您可以执行以下操作:
public static char ReadKey(IEnumerable<char> validKeys)
{
var validKeySet = new HashSet<char>(validKeys);
while (true)
{
var key = Console.ReadKey(true);
if (validKeySet.Contains(key.KeyChar))
{
//you could print it out if you wanted.
//Console.Write(key.KeyChar);
return key.KeyChar;
}
else
{
//you could print an error message here if you wanted.
}
}
}
当您使用ReadKey(true)
时,true
表示它将拦截该密钥而不会在控制台上显示该密钥。这使您可以选择确定它是有效还是无效。
答案 2 :(得分:0)
如果switch
语句没有default
块,并且正在打开的表达式与任何case
块都不匹配,则switch
语句会什么都没有。
答案 3 :(得分:0)
当你只有3个案例时,一个开关并不比一个简单的if-else
构造更有效。
if (input == "N")
{
// New game
}
else if (input == "L")
{
// Load game
}
else if (input == "E")
{
// Exit game
}
// if none of the cases match, the input is effectively ignored.
如果您坚持使用开关,那么您的构造非常相似:
switch (input)
{
case "N":
//New Game
break;
case "L":
//Load Game
break;
case "E":
//Exit Game
break;
default:
//Do nothing (ignore unmatched inputs)
break;
}
答案 4 :(得分:0)
感谢回复,伙计们。我设法通过执行以下操作来解决问题:
static void titleInput()
{
ConsoleKeyInfo titleOption = Console.ReadKey(true);
switch (titleOption.Key)
{
case ConsoleKey.N:
Console.Clear();
break;
case ConsoleKey.L:
break;
case ConsoleKey.E:
Environment.Exit(0);
break;
default:
titleInput();
break;
}
}
我不确定这是多么“恰当”,但它确实做到了我需要做的事情。除“N”,“L”和“E”以外的任何键都不再执行任何操作。