2016-09-12 4 views
2

몇 가지 안내를 찾는 C 초보자.왜 이중 영역 = 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

(I 오히려이 별도의 방법을 만들 것입니다하지만) 당신은 시작 지점으로 돌아 할 수 있습니다? 'area'의 값은 초기화하지 않으면 어떻게 될까요? –

+0

방어 프로그래밍이라고합니다. –

+0

모범 사례를 위해서 'switch statement'에'default' case를 넣으십시오. – Prisoner

답변

4

에 해당 사용자 입력 123을 상상해 "삼각형 사각형을위한 원, 2 일, 3을 선택하십시오 :

질문이 경우 area는 없었을 것입니다. 할당 됨 (case은 실행되지 않음) 및

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

은 무엇을 출력 할 것인지 알지 못합니다.

+0

답변 해 주셔서 대단히 감사드립니다. 지금은 이해 . –

0

오류의 이유는 switch 문에있는 사례 중 어느 것도 발생하지 않을 수 있다는 것입니다. 사용자가 잘못된 입력을합니다. 언급 한 바와 같이 케이스 문 비는 Why compile error "Use of unassigned local variable"?

+0

변수'area'는 값 유형입니다. 유효한 값이 아니기 때문에'null'이 될 수 없습니다. 단순히 초기화되지 않고 컴파일을 통과하지 않습니다. – kiziu

1

를 실행하는 경우

또한 지역 변수가 기본 값으로 초기화되지 않으며, 따라서 지역은 값이없는, 그것은 값을 갖고 보장하기 위해 변수를 초기화하는 것이 좋습니다입니다 어떤 값도 할당하지 않고 호출하게함으로써 가능한 예외 오류를 피할 수 있습니다. 또한, "고토"위치를 추가하는 것은`userValue` 4와 동일한 경우는 어떻게됩니까

 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

나는 그 시작을 좋아한다. 그것은 나를 위해 새롭고 나는 지금부터 그것을 사용할 것이라고 생각합니다! :) –

관련 문제