2011년4월13일..for문에서 초기식과 증감식의 변형, gdb(GNU Debugger), 무한반복문, 마인드스톰 자동차 개조

 

1. 예제3-23

○conio.h는 윈도우에만 있고 getche()는 표준C가 아니니 빼고 getche()대신 표준C의 한 문자를 읽어 들이는 함수인 getchar()를 사용함.

image image

a를 입력하고 엔터를 치면 a가 출력되고 순식간에 다시 입력받고 아무 것도 찍히지 않은채 다음의 입력을 받는다.

○getchar()는 한 문자를 입력하더라도 버퍼에 엔터키가 남아 다음 getchar()에서 엔터키가 읽히므로 버퍼를 지우기 위해 교과서 p.89의 fflush()로 버퍼를 지워주면 되나 아쉽게도 리눅스에선 되지 않았다. 엔터키를 없애기 위해 getchar()를 하나 더 씀.

clip_image002image

사용자가 하나의 문자(‘A’)를 입력하려고 getchar()의 경우 마지막에 엔터키를 누르게 된다. 그럼 엔터키까지 버퍼에 들어가게 된다. for문의 조건식에서 문자(‘A’)를 저장하고 형식지정자 %c로 출력한 다음 엔터키가 다음에 쓰이지 않게 한 번 더 읽어 들여 형식지정자 %d로 출력하니 십진수10이 출력 되었다. ASCII표를 보니 LF (line feed)다.

●symbol table

ch는 100번지에 i는 104번지에 있다고 가정하고 그리면,

image 

 

★사회에 나가 중압감을 이겨내려면 실력이 있어야 한다. (자본주의, 무한 자유경쟁의 세계)

★DOS에서 실행파일이 exe확장자이고 리눅스는 없음.
   실행파일 앞에 “./” 넣을 것.

 

2. 예제 3-24

image image

증감식이 printf()에 있다. 주석으로 for문과 아래의 while문을 비교해보면 같은 결과를 낸다는 것을 알 수 있다.

 

3. gdb (GNU Debugger)

ⓐ소스코드작성. (2번의 예제3-24사용)
ⓑ컴파일시 -g옵션 추가. # gcc –g –o p3-24 p3-24.c 
ⓒ# gdb p3-24
image 

ⓓ(gdb) list 를 쳐서 소스코드 보기. 행 번호 확인.
 image

ⓔ(gdb) break 행번호를 쳐서 브레이크 포인트 지정.
image

ⓕ(gdb) run을 쳐서 실행
image

ⓖ(gdb) display 변수명을 쳐서 변수의 값을 스텝마다 확인.
image  i를 선언하고 초기화를 하지 않아 쓰레기값이 들어가 있다.

ⓗ(gdb) step또는 next를 쳐서 다음 행의 명령문 실행. next는 함수내부로 들어가지 않음.
image

매 step마다 변수의 값을 확인할 수 있어 사람이 실수를 알 수 있다.

★디비거를 모르면 printf()와 같은 출력함수로 중간중간 값을 확인하면 된다.

 

●gdb 명령어 정리는 다음 기회에…

DSCN2213 DSCN2214

 

3. 무한 반복문

DSCN2215

 

 

4.마인드스톰 자동차를 불도저로 개조

DSCN2195 DSCN2196 DSCN2197 DSCN2198 DSCN2199 DSCN2200 DSCN2201 DSCN2202 DSCN2203 DSCN2204 DSCN2205 DSCN2206

 

 

 

 

 

 

 

이러다 월화수목금금금 되는거 아니야…OTL