-3

15 行目 (Switch (z)) で「Control cannot fall through one case label to another」というエラーが表示されます。

   using System; 
   namespace test
   {
    class MainClass
     {
     public static void Main (string[] args)
     {
        Console.WriteLine ("Velkommen til pCalc! Vælg hvad du skal I menuen:");
        Console.WriteLine ("1. Phythagoras");
        Console.WriteLine ("2. Cirklens areal og omkreds");
        Console.WriteLine ("3. + - * eller /");

        int z = Convert.ToInt32(Console.ReadLine());
        switch (z)
        {
        case 1:
            Console.WriteLine ("Her skal du angive 2 værdier, a og b for at beregne c");
            Console.WriteLine ("Skriv a værdien: ");
            double a = double.Parse (Console.ReadLine ());
            Console.Clear ();
            Console.WriteLine ("Skriv værdien for b: ");
            double b = double.Parse (Console.ReadLine ());
            Console.Clear ();
            Console.WriteLine (Math.Sqrt((Math.Pow(a, 2))+(Math.Pow(b, 2))));
            break;

        case 2:
        Console.WriteLine ("Skriv radius a cirklen: ");
        double r = double.Parse (Console.ReadLine ());
        double areal = (Math.Pow (r, 2) * Math.PI);
        Console.Clear ();
        Console.WriteLine (areal);
        Console.WriteLine ("Vil du også vide omkredsen? Skriv 1 for Ja, 2 for Nej");
        int q = Convert.ToInt32 (Console.ReadLine ());
        switch (q) {
        case 1:
            Console.WriteLine (r * 2 * Math.PI);
            break;
        case 2:     
            break;
        }
        }   
    }
}

}

4

2 に答える 2

4

すべてのケース (最後のケースも!) をbreakステートメントで終了する必要があります。具体的にはあなたの場合:

case 2:
        Console.WriteLine ("Skriv radius a cirklen: ");
        double r = double.Parse (Console.ReadLine ());
        double areal = (Math.Pow (r, 2) * Math.PI);
        Console.Clear ();
        Console.WriteLine (areal);
        Console.WriteLine ("Vil du også vide omkredsen? Skriv 1 for Ja, 2 for Nej");
        int q = Convert.ToInt32 (Console.ReadLine ());
        switch (q) {
        case 1:
            Console.WriteLine (r * 2 * Math.PI);
            break;
        case 2:     
            break;
        }
break; // ← mandatory!
于 2013-10-26T17:27:49.060 に答える
-1

ここで 1 つの明確化。

ここでの回答は、休憩が必要であることを示しています。これは、1 つのコーディング ケースを除いてほとんどの場合当てはまります。「ブレーク」に到達できない場合、それは不要であり、それを省略するとコンパイラの警告が静かになります。

ケースが直接または一連の条件を介して「戻る」かどうかを検討してください。

<code>
case 1:
    if (Red) { return 6;} else {return 10;}
case 2:
    if (Blue) {return 4;} else {return 50;}

両方の条件が返される (または壊れる) 必要がありますが、すべてのコード ストリームがスイッチから抜け出す限り、コンパイラはそれで問題ありません。

于 2015-06-03T19:23:32.010 に答える