본문 바로가기

ETC Programmings

포인터 살짝 맛보기 + 혼자서 푸는 연습문제..

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
아 ㄹ바ㅣ젖ㅂ댜ㅓ랮ㅂ덫 -_-;; 장장 2시간 하고도 30분 정도가 소요된.. 코딩이었습니다. 암튼.. 문제를 해결해서 기분이 좋습니다만.. 새삼스래 자바랑 이클립스님한테 감사합니다;;; 비주얼 C++ 완전 -_-... 코딩하면서 뭐가 문젠지 표시를 안해줘서 ㅠㅠㅠ 옘병헐... 자잘한 부호 문제로 삽질을 하고 있으니 환장할 노릇입니다..

여튼 지금 1학년들이 하고 있는 자바 스터디에 있는 문제를 풀어 봤는데.. 다음과 같은겁니다.

국어 점수를 입력하세요

95

영어 점수를 입력하세요

85

수학 점수를 입력하세요

90

---------------------

국어 : 수

영어 : 우

국어 : 수

---------------------

총점 : 270

평균 : 90 , 평점 : 수

이런 결과 화면을 도출 하는 겁니다.. 그래서 필요한 함수들을 도출 해 봤는데.. 점수를 입력받는 함수와 점수를 받아서 평가하는 함수와 평균과 평점을 구하는 함수가 필요하게 됐습니다. 이전에 해왔던 코딩과는 차원이 틀렸습니다. 가장 황당했던 부분은 어떻게 문자열을 반환해야하는가? 하는 문제였습니다. 일단 char 형은 해봐야 1바이트 크기 밖에 되지를 않고.. 즐네이버에서도 알려주지를 않더군요;; 그래서 반환형을 사용하지 않고 코딩을 해나가게 됐고..

이번에는 아주 황당한 문제에 봉착하게 됩니다. 과목 갯수만큼 나눠서 평균을 구해야되는데.. 자꾸 0이 나오는 겁니다.. -_-;;

void inputDepartmentGrade(char department[4], int numberOfDepartments){
   printf("%s 과목의 점수를 입력하세요\n", department);
   numberOfDepartments++;
}
이렇게 굵은 글씨로 된 부분을 통해서 변수의 값을 증가 시켜줄라고 했는데.. 어랍쇼?? 안됩니다.. -_-;; 황당 시츄에이션이라고 생각했습니다. 왜 전역 변수가 안바뀌는걸까...? 라고 고민중에.. 생각해보니.. 저건 전역 변수가 아니고 지역 변수였던거죠.. -_-;; 그럼 어떻게 저 값이 바뀌도록 해야할까?....

옳거니 ㅅㅂ.. 예전에 다루었던 Call by Value 와 Call by Reference 라는걸 배웠었는데.. 제가 위와같이 코딩 했던건 Call by Value 방식인거죠.. 실제 값에는 영향을 주지 않는 복사된 값에 삽질을 했던겁니다.

그래서 이렇게 바꿨습니다. Call by Reference로 바꿔서.. 직접 주소값을 던져줘서 바꿔주는 겁니다 값을..

void inputDepartmentGrade(char department[4], int* numberOfDepartments){
   printf("%s 과목의 점수를 입력하세요\n", department);
   *numberOfDepartments = *numberOfDepartments + 1;
}
이렇게 바꼈습니다. 일단 * 이라는 기호가 들어갔고.. 아래 부분도 복문으로 바뀌었습니다. *numberOfDepartments++ 이라고 하면.. 안되더군요.. -_-;; 왜그런지는 못찾아 냈습니다. 하지만 이렇게 하니까 정확하게 과목 수만큼 숫자가 나오더군요.. 자세한 과정은 모르지만 포인터라는 놈을 제가 사용을 한겁니다.. 아직 개념을 못잡고 있습니다만.. 포인터를 사용해서 해당 값이 있는 주소값을 던져주는 겁니다.

메인 함수에는 이렇게 써줬죠..

inputDepartmentGrade("국어", &numberOfDepartments);
& 라는 기호와 * 라는 기호에 대해서 주목해야할 필요가 있습니다. * 포인터 인듯 하고.. &은 주소값을 이야기 하는것 같습니다만.. 아직 더 배워봐야 알겠죠...

아래는 소스코드와 실행 결과 입니다.


사용자 삽입 이미지
이전까지만 해도 C를 참 쉽게;; 생각했는데 전혀 그렇지 못한거 같습니다.. ^^;; 포인터와 배열이 나오기 시작하는데.. 정말 걱정이 많네요 -ㅅ-;; 자바랑 비슷하겠거니 생각했는데.. 비슷한 부분에 너무 심취해서 당연히 될줄 알았던 것들에서 많이 빗나가는 군요.. -_-;; 즐공부!!!