C# 默认值为真时无需按(自动循环)
我为一个菜单编写了这段代码,当我按I、U或R时,其中一个情况将实现,当你按Q时,它将返回主菜单。我的问题是,当默认值为true时,我希望它循环到主菜单,而不需要按Q,我尝试使用tast=Consolekey.QC# 默认值为真时无需按(自动循环),c#,C#,我为一个菜单编写了这段代码,当我按I、U或R时,其中一个情况将实现,当你按Q时,它将返回主菜单。我的问题是,当默认值为true时,我希望它循环到主菜单,而不需要按Q,我尝试使用tast=Consolekey.Q 对不起,我的英语真的很糟糕很明显,你不能从循环中中断,因为break从开关语句中断,你肯定已经注意到了 两个简单的解决方案: 首先,添加一个布尔标志,指示应该退出循环,在while语句中添加一个新条件 string tastetryk; ConsoleKeyInfo tast; Con
对不起,我的英语真的很糟糕很明显,你不能从循环中
中断
,因为break
从开关
语句中断,你肯定已经注意到了
两个简单的解决方案:
首先,添加一个布尔标志,指示应该退出循环,在while
语句中添加一个新条件
string tastetryk;
ConsoleKeyInfo tast;
Console.ForegroundColor = ConsoleColor.White;
Console.BackgroundColor = ConsoleColor.Blue;
Console.Clear();
do
{
Console.WriteLine("Menu");
Console.WriteLine(" ");
Console.WriteLine("Tryk en tast for at vælge funktion");
Console.WriteLine(" ");
Console.WriteLine("I - Beregn strøm");
Console.WriteLine("U - Spænding");
Console.WriteLine("R - Modstand");
Console.WriteLine(" ");
Console.WriteLine("(Esc) for at slutte ");
tast = Console.ReadKey();
tastetryk = tast.Key.ToString();
Console.Clear();
switch(tastetryk)
{
case "I":
Console.WriteLine("du har tastet I");
Console.Write("Tast Q for at komme tilbage");
tast = Console.ReadKey();
break;
case "U":
Console.WriteLine("du har tastet U");
Console.Write("Tast Q for at komme tilbage");
tast = Console.ReadKey();
break;
case "R":
Console.WriteLine("du har tastet R");
Console.Write("Tast Q for at komme tilbage");
tast = Console.ReadKey();
break;
default:
Console.WriteLine("forkert tast");
Thread.Sleep(1000);
Console.Clear();
break;
}
}
while (tast.Key == ConsoleKey.Q);
现在,我知道这可以被认为是纯粹的邪恶,但是。。。您是否考虑过使用goto
bool bExit = false;
do
{
switch
{
/*
code here
*/
default:
bExit = true;
//etc.
}
}
while(tast.Key == ConsoleKey.Q || !bExit)
我相信第二种解决方案实际上更干净,但人们可能会对
goto
语句做出激烈反应。是的,我正要使用goto,但我们的老师告诉我们永远不要使用它……)这是普遍的看法,如果使用不当,它会生成很难维护的代码。另一方面,我也不太喜欢神奇的退出条件。通常我会告诉你用你最好的判断。。。但是如果这是家庭作业,那就听老师的,用第一种方法来代替!;)
do
{
switch
{
/*
code here
*/
default:
goto outOfLoop;
}
}
while(tast.Key == ConsoleKey.Q)
outOfLoop:
// etc.