1. 이번 시간은
2. 폼의 구성
2.1 텍스트박스를 도구상자에서 TextBox를 선택하여 가져왔습니다. 자동으로 이름이 textBox1로 부여되었습니다. textBox1를 복사, 붙여넣기하여 textBox2를 만들었습니다.
2.2 라벨을 도구상자에서 Label을 가져왔습니다. 자동으로 이름이 label1로 부여되었습니다.
2.3 버튼을 도구상자에서 가져왔습니다. 자동으로 이름이 button1로 부여되었습니다.
button1의 속성에서 Text를 곱하기로 바꾸었습니다
폼 구성의 방법은 CS1002 ~ CS1010을 참고하시면 되겠습니다.
3. 코드 작성
3.1 button1의 버튼 클릭 이벤트 생성
폼에서 button1을 두번 클릭(더블 클릭)하면 자동적으로 버튼 클릭 이벤트인 button1_Click() 가 만들어집니다. { 와 } 사이에 코드를 작성합니다.
3.2 코드
3.2.1 int su1 = 0, su2 = 0, hap = 0;
변수 su1, su2, hap을 정수로 선언하며 그 초기값은 0 이라고 컴퓨터에게 알려줍니다.
3.2.2 su1 = Convert.ToInt32(textBox1.Text);
su1 = textBox1.Text;
이렇게 하면 문법에러입니다.
su1은 숫자(정수)이고 textBox1.Text는 문자이기 때문입니다. 문자를 숫자로 옮길 수가 없습니다. 문자를 숫자로 바꿔서 옮겨야 합니다. 문자를 숫자로 바꾸는 방법은 여러가지가 있지만 Convert.ToInt32() 를 사용하겠습니다.
Convert.ToInt32(문자데이터)
( 와 ) 사이에 문자데이터가 들어 갑니다. 그러면 숫자(정수)로 변환됩니다.
textBox1의 Text를 정수로 변환시켜 정수인 su1에 옮겨라 입니다. 수식 연산이 가능한 숫자로 보관하라는 것이지요. 그렇지만 변환시킨 결과는 su1에 옮겨가지만 textBox1의 Text의 값은 그대로 있습니다. textBox1의 Text의 값을 복사하고 복사한 값을 변환시키기 때문입니다.
3.2.3 su2 = Convert.ToInt32(textBox2.Text);
textBox2의 Text를 정수로 변환시켜 정수인 su2에 옮겨라 입니다. 수식 연산이 가능한 숫자로 보관하라는 것이지요. 이 때 변환시킨 결과는 su2에 옮겨가지만 textBox2의 Text의 값은 그대로 있습니다. textBox2의 Text의 값을 복사하고 복사한 값을 변환시키기 때문입니다.
3.2.4 hap = su1 * su2;
정수인 su1과 su2가 곱하기 연산을 한 후 그 결과를 정수인 hap에 옮기는 것이지요. 오른쪽과 왼쪽이 모두 같은 정수이니까 문제가 생기지 않습니다. 그리고 계산한 결과는 hap에 옮겨가지만 su1과 su2의 값은 그대로 있습니다. su1과 su2의 값으로 연산한 값은 다른 장소에 저장하고 이 저장된 값을 옮기기 때문입니다.
3.2.5 label1.Text = hap.ToString();
label1.Text = hap;
이렇게 하면 문법에러입니다.
hap은 숫자(정수)이고 label1.Text는 문자이기 때문입니다. 숫자를 문자로 옮길 수가 없습니다. 이번에는 숫자를 문자로 바꿔서 옮겨야 합니다. 숫자를 문자로 바꾸는 방법은 여러가지가 있지만 이번 시간은 숫자 뒤에 .ToString()을 사용하였습니다.
정수인 hap을 문자로 변환시켜 문자인 label1의 Text에 옮겨라 입니다. 변환시킨 결과는 label1의 Text에 옮겨가지만 정수인 hap에 있는 값은 그대로 있습니다. hap의 값을 복사하고 복사한 값을 변환시키기 때문입니다.
4. 실행
4.1 정수 100과 200을 입력하고 버튼(곱하기) 클릭
결과가 20000 입니다. 연산이 제대로 되었습니다.
4.2 소숫점이 있는 수, 10.5를 textBox1에 입력하고 버튼(곱하기) 클릭
버튼 클릭 결과
에러가 발생했습니다. 실행에러입니다. su1 = Convert.ToInt32(textBox1.Text); 에서 발생했습니다.
왜 에러가 발생했을까요?
에러 메시지를 살펴봅시다. '입력 문자열에 형식이 잘못되었습니다' 라는 문구가 보이네요.
입력 문자열이니까 textBox1의 Text를 말하는데 이 Text가 잘못되었다는 것이지요.
언제?
Convert.ToInt32()가 textBox1의 Text를 숫자로 바꾸려고 할 때에 에러가 발생하였습니다.
ToInt32()는 문자열을 정수로 바꾸는 것이기 때문에 textBox1의 Text가 정수의 모양이여야 하는데 1.5는 정수의 모양이 아니기때문에 에러를 발생시켰습니다.
그렇다면 어떻게 해야 할까요?
정수뿐만 아니라 유리수도 가능하게 하는 것이 필요하죠.
그래서 C#은 Convert.Double()을 준비해 두었습니다. Convert.Double()은 정수에서 유리수까지 변환이 가능합니다.
의문이 생기지 않나요? 왜 처음부터 Convert.Double()을 사용하지 않고 Convert.ToInt32()를사용했나요?
그 이유는 변수 su1도 정수가 아니라 유리수로 바꿔야하고 유리수는 정수보다 컴퓨터 용량을 크게 사용하기 때문입니다. 유리수가 꼭 필요한 경우에만 사용하면 메모리가 절약되겠죠.
코드를 수정해야겠습니다.
4.3 코드 수정
4.3.1 코드를 수정할 때는 반드시 실행을 중시시켜야 합니다.(디버깅 중지아이콘 클릭)
4.3.2 먼저 작성한 코드를 주석처리 합니다. 주석처리하면 실행이 되지 않습니다. 참고용으로 남거둔거죠.
4.3.3 수정한 코드
주석처리한 코드 5라인을 복사하여 아래에 붙여놓고 일부분만 수정했습니다.
Double su1 =0, su2 =0, hap = 0;
int에서 Double로 고쳤습니다. 정수가 아니라 유리수 변수로 하겠다는겁니다.
su1 = Convert.ToDouble(textBox1.Text);
su2 = Convert.ToDouble(textBox2.Text);
2개 라인의 코드에서 Convert.ToInt32()를 Convert.Double()로 수정했습니다.
hap = su1 * su2
유리수 su1에 유리수 su2를 곱하여 그 결과를 유리수인 hap에 전달하는 것이니까 코드는 그대로 해도 됩니다.
label1.Text = hap.ToString();
ToString() 는 숫자를 문자로 바꾸는 것으로 정수이든지 유리수이든지 관계없이 문자로 변환합니다.
유리수인 hap을 문자열로 바꾸어서 문자열인 label1의 Text에 옮기는 것이니까 문제가 없습니다. 코드를 수정할 필요가 없지요.
5. 수정한 코드 실행
10.5와 200을 입력하고 버튼(곱하기)을 클릭하면 에러가 없이 2100이 나옵니다.
또 10.5와 1.1을 입력하고 버튼(곱하기)을 클릭하여도 에러가 없이 11.55가 나옵니다.
5. 다음 시간에는
수고하셨습니다.
** 동영상 **
'1일1코딩.C# - 초보코딩' 카테고리의 다른 글
CS1015 길이가 얼마고? (0) | 2020.10.23 |
---|---|
CS1014 숫자 나누기 (0) | 2020.10.20 |
CS1012 숫자 빼기 (0) | 2020.10.16 |
CS1011 숫자 합치기 (0) | 2020.10.14 |
CS1010 Review 01~09 (0) | 2020.10.11 |