2016-09-12 10 views
2

いくつかのガイダンスを探しているCの初心者。なぜdouble area = 0;

以下のコードでは、ダブルエリアを使用しています。それは私にエラーを与えるだろう: "未使用のローカル変数領域の使用"。私はダブルエリア= 0を置かなければならなかった。

私の質問はなぜですか?なぜ私はそれに値を割り当てなければならないのですか?私は以前にそれをしなければならなかったので、私は少し混乱しています。

ご回答いただきありがとうございます。

 int userValue, rad, heightOfRectangle, widthOfRectangle, baseOfTriangle, heightOfTriangle; 
     double area = 0; 

     Console.Write("\n\n"); 
     Console.Write("Calculating Area of Geometrical Shape\n"); 
     Console.Write("=======================================\n"); 
     Console.Write("\n\n"); 
     Console.Write("Please select 1 for Circle, 2 for Rectangle and 3 for Triangle: "); 

     userValue = Convert.ToInt32(Console.ReadLine()); 

     switch (userValue) 
     { 
      case 1: 
       Console.Write("Please Enter Radius of Circle: "); 
       rad = Convert.ToInt32(Console.ReadLine()); 
       area = 3.14 * rad * rad; 
       break; 

      case 2: 
       Console.Write("Please enter Height of Rectangle: "); 
       heightOfRectangle = Convert.ToInt32(Console.ReadLine()); 
       Console.Write("Please enter Width of Rectangle: "); 
       widthOfRectangle = Convert.ToInt32(Console.ReadLine()); 
       area = widthOfRectangle * heightOfRectangle; 
       break; 

      case 3: 
       Console.Write("Please enter Base of Triangle: "); 
       baseOfTriangle = Convert.ToInt32(Console.ReadLine()); 
       Console.Write("Please enter height of Triangle: "); 
       heightOfTriangle = Convert.ToInt32(Console.ReadLine()); 
       area = .5 * baseOfTriangle * heightOfTriangle; 
       break; 

     } 

     Console.WriteLine("\nThe area is {0}", area); 
+4

「userValue」が4の場合はどうなりますか?あなたがそれを初期化しなかったなら、 'area'の価値は何ですか? –

+0

防衛プログラミングと呼ばれています。 –

+0

ベストプラクティスのために、 'switch文'に 'default'を入れてください。 – Prisoner

答えて

4

123

にそのユーザーの入力を想像円、矩形のための2とトライアングルのための3のための1を選択してください:

質問この場合areaがされていません。割り当て済み(caseは実行されません)、

Console.WriteLine("\nThe area is {0}", area); 

は何を出力するかわかりません。

+0

お返事ありがとうございました。今、私は分かる 。 –

0

エラーの理由は、switchステートメントのケースのどれも発生しないことが起こりうることです。ユーザは間違った入力をする。述べたようにcase文の非をWhy compile error "Use of unassigned local variable"?

+0

変数 'area'は値型です。有効な値ではないので、' null'になることはありません。単純に初期化されず、コンパイルをパスしません。 – kiziu

1

を実行している場合

また、ローカル変数はデフォルト値で初期化されていない、ので、面積値がない、それは価値があることを確認するために変数を初期化することをお勧めします何らかの値が割り当てられていない状態で呼び出されると、例外エラーが発生することはありません。さらに、「goto」プレースメントを追加すると、開始点に戻ることができます(ただし、別の方法を作成したいと思いますが)。

 int userValue, rad, heightOfRectangle, widthOfRectangle, baseOfTriangle, heightOfTriangle; 
     double area; 

     Console.Write("\n\n"); 
     Console.Write("Calculating Area of Geometrical Shape\n"); 
     Console.Write("=======================================\n"); 
     Console.Write("\n\n"); 

     Start: 

     Console.Write("Please select 1 for Circle, 2 for Rectangle and 3 for Triangle: "); 

     userValue = Convert.ToInt32(Console.ReadLine()); 

     switch (userValue) 
     { 
      case 1: 
       Console.Write("Please Enter Radius of Circle: "); 
       rad = Convert.ToInt32(Console.ReadLine()); 
       area = 3.14 * rad * rad; 
       break; 

      case 2: 
       Console.Write("Please enter Height of Rectangle: "); 
       heightOfRectangle = Convert.ToInt32(Console.ReadLine()); 
       Console.Write("Please enter Width of Rectangle: "); 
       widthOfRectangle = Convert.ToInt32(Console.ReadLine()); 
       area = widthOfRectangle * heightOfRectangle; 
       break; 

      case 3: 
       Console.Write("Please enter Base of Triangle: "); 
       baseOfTriangle = Convert.ToInt32(Console.ReadLine()); 
       Console.Write("Please enter height of Triangle: "); 
       heightOfTriangle = Convert.ToInt32(Console.ReadLine()); 
       area = .5 * baseOfTriangle * heightOfTriangle; 
       break; 
      default: 
       goto Start; 
     } 

     Console.WriteLine("\nThe area is {0}", area); 
     Console.Read(); 
+0

お返事ありがとうございます。 –

+0

私はそのようなスタートを好きです。それは私のために新しく、私は今から使い始めると思います! :) –

関連する問題