본문 바로가기
코스웨어/16년 스마트컨트롤러

20160409_김가연_스터디일지_구조체의 정의

by 알 수 없는 사용자 2016. 4. 9.
728x90
반응형

구조체에 대한 지식이 부족한 것 같아서 오늘은 구조체를 학습해 보았습니다.



458p 문제 22-1

문자열 형태의 '종업원 이름'과 문자열 형태의 '주민등록번호' 그리고 정수 형태의 '급여정보'를 저장 할 수 있는 emlpoyee라는 이름의 구조체를 정의해 보자.

그리고 나서 employee 구조체 변수를 하나 선언한 다음,  프로그램 사용자가 입력하는 정보로 이 변수를 채우자.

그리고 마지막으로 구조체 변수에 채워진 데이터를 출력해보자.

 

이면지에 소스를 대강 적어보았습니다.



그 후에 비주얼 스튜디오에 소스를 재정렬 하면서 차근차근 옮겨보았습니다.



적어놓고 보니 소스가 생각보다 짧다고 생각했습니다.

실행을 하여 보면

보시는 것처럼 잘 실행이 됩니다!



typedef을 할 필요는 없었지만 배웠던것이 생각나서 써보았습니다.

strruct 함수 끝에 AM;으로 끝나는 부분은 

다른 함수안에서 보다 간편하게 사용하기 위해서 입니다.

typedef을 하지 않으면 'struct employee' 라고 작성해야하는 것을 typedef을 사용 함으로 써 'AM' 처럼 간단한 이름으로 사용 가능하도록 되었습니다.

따라서 위 소스에서는

∴ struct employee = AM


타입 디파인을 한 구조체의 변수를 선언합니다.

저는 하나의 변수 man만을 선언 하였지만 여러개 선언도 가능합니다.


printfscanf에 사용할때에는 

man.cName 

위처럼 사용이 가능합니다.


man변수는 AM구조체의 변수로 선언 되어있습니다.

위처럼 사용하는 이유는 

AM구조체의 변수로 선언되어 있는 man(종업원)변수의 iName (이름) , iNum (주민번호) , iPay (급여정보) 를 입력&출력 받기 위해서 입니다.


'왜이렇게 복잡하게 사용하나?' 라고 생각 했었으나

한명이 아닌 여러명의 정보를 입력&출력 받는다고 생각하여 보면 훨씬 편하고 간단하다는 것을 알 수 있습니다.


예를 들어,

man1 , man2 , man3 ... man10 까지 입력받는다고 생각해 보면

방금 선언해 놓은 구조체 하나로 모든 변수들의 값을 입력 받을수 있기 때문입니다.

변수(ex : man4) 뒤에 '.' 을 붙이고 그 뒤에 구조체 안의 변수(ex : cName)를 입력하면 

메인 함수 내부에 따로 다른 변수선언을 하지 않아도 정보 입력&출력가능해 집니다.


구조체 내부 변수중에 유일하게 int형인 iPay에는

scanf를 할때에 &를 붙여야 합니다.

다른 char형 변수들은 그 존재만으로도 주소를 나타내지만 

int 형 변수는 그 주소에 입력되어 있는 값을 나타내기 때문입니다.

저는 이 부분을 깜빡했었습니다.

컴파일은 되지만 실행을 할때 에러가 납니다.





답 소스는 본인이 임의로 typedef을 한 것 이외에는 딱히 다른점이 보이지 않아서 첨부하지 않겠습니다.


연습문제를 풀어봄으로 인해서 

적어도 위 소스 정도 수준의 구조체는 완벽하게 이해 할 수 있게 된 것 같습니다.


앞으로 더욱 이해하기 어려운 것들을 공부하겠지만 지금처럼만 차근차근 해나가면 될 것 같습니다.


이상입니다.




※추가


463p 문제 22-2 가 생각보다 어렵지 않아서 바로 풀어 보았습니다.

고로 따로 게시물을 작성하지 않고 기존 게시물에 추가하도록 하겠습니다.

앞서 문제22-1에서 정의한 employee 구조체를 기반으로 길이가 3인 배열을 선언하자.

그리고 세명의 정보를 프로그램 사용자로부터 입력 받아서 배열에 저장한 다음, 배열에 저장된 데이터를 순서대로 출력하는 예제를 작성해보자.



기존 소스에서 조금만 추가하면 충분히 완성히 가능한 문제 였습니다.

배열에 관한 것은 선생님께서 충분히 알려주셔서 어렵지 않았습니다.


printf로 알아보기 쉽도록 줄을 그었습니다.


실행을 시키면


저와 남자친구 그리고 동생의 정보를 입력해 보았습니다.



아까의 소스와 비교해서 바뀐부분을 표시해 보았습니다.

크게 보면

man->man[3]

man->man[i]

for문

이 세가지가 되겠군요.


이상입니다.


728x90