1
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);

メニュー用にこのコードを作成しました。I、U、またはRを押すと、いずれかのケースが発生し、Qを押すとメインメニューに戻ります。私の問題は、デフォルトがtrueの場合、Qを押す必要なしにメインメニューにループしたいのですが、tast=Consolekey.Qで試しました

私の本当に悪い英語でごめんなさい

4

1 に答える 1

0

確かに気づいたように、ステートメントからブレークするbreakため、明らかにループから抜け出すことはできません。breakswitch

2 つの簡単な解決策:

最初に、ループを終了する必要があることを示すブール フラグを追加し、whileステートメントに新しい条件を追加します。

bool bExit = false;

do
{
    switch 
    {
        /*
        code here
        */
        default:
            bExit = true;
            //etc.
    }
}
while(tast.Key == ConsoleKey.Q || !bExit)

さて、これが純粋な悪と見なされる可能性があることは知っていますが... を使用することを検討しましたgotoか?

do
{
    switch 
    {
         /*
         code here
         */
         default:
            goto outOfLoop;
    }
}
while(tast.Key == ConsoleKey.Q)

outOfLoop:

// etc.

2 番目の解決策は実際にはよりクリーンであると思いますが、人々はgotoステートメントに激しく反応する可能性があります。

于 2013-02-04T19:39:28.300 に答える