디버그 모드 돌려서 이곳 저곳 찝어놓고 한스텝씩 넘겨 보면서 변수의 변화나 메모리 참조하는 데를 짚어가며 보니 좀 낫긴한데, MSX-BASIC적 마인드로는 왜 그런 동작을 할까?라는 의심이 드는 부분이 좀 있다. 뭐 그냥 원래 그렇게 도는 거야~ 라고 생각하고 넘어가다보면 언젠가 이해할 날이 오겠지.
포인터에 대해서 공부 중인데, 정작 고민한 것은 getchar()라는 명령의 동작에 대해서-_-;;;
[#M_ 뭐냐면 | 닫기 |
a=getchar();
printf(“%c”,a);
} while (a !=’x’);
위의 문장. MSX-BASIC적 마인드로는…
abc(엔터)라고 하면…
getchar()가 반각 문자 하나를 입력 받으니 a 만 입력받고 나머지 글자는 무시하고, 반복문의 힘으로 다시 입력 대기 상태로 들어가야 할 거 같은데…
실제 동작시켜보면
abc(엔터)를 입력하면
a받고 printf(“%c”,a);하고, 저 반복문의 덕에 a=getchar(); 로 가서 b를 받아오고 printf(“%c”,a);하고, 다시 반복문으로 a=getchar(); 로 가서 c를 받아오고, …
이런 식으로 모두 받아 abc를 출력한다.
음..ㅡ.-);;;;
그렇다면 getchar()는 (엔터)가 들어올 때까지의 모든 값을 임시로 보관하고 있다가, 다시 호출하면 입력이 없어도 그다음값을, 또 호출하면 그다음 값을… 이런식으로 해서 (엔터)값이 올때까지 계속 보내주고 종료하는 걸까? 물론, 반복문이 없다면 abc(엔터)를 입력해도 a만 보내고 끝난다.
Each routine reads a single character from stdin and increments the associated file pointer to point to the next character. getchar is the same as _fgetchar, but it is implemented as a function and as a macro.
各ルーチンでは、stdin から 1 文字を読み取り、関連付けられたファイル ポインタが次の文字を指すようにポインタを増やします。getchar は、_fgetchar と同じですが、関数およびマクロとして実装されています。
흠.. MSDN에 따르면 그런가 보네..-_-;;;;
a가 위치한 메모리 공간은 1byte, 고정된 어드레스. 거기에 계속 새로운 값이 들어간다. getchar()가 가지고 있는 임시의 메모리 공간을 찾으면 입력한 abc를 다 볼 수 있으려나.
음..
getchar()를 getch()로 바꾸니 간단하게 원하는(?)대로 바뀌었다. 역시 getchar()는 그런 용도인 모양.
_M#]
며칠전 보던 두꺼운 책을 접어두고 새로 얇은 C관련 책을 한 권 샀다. 맘에 든다.
확실히 우리나라보다는 일본애들의 시장규모에 따른 요구가 많아서인지 재밌는 책을 많이 만들어내는 것 같다. 우리도 인구가 늘고 시장이 커지면 이런 재밌는 시도가 보다 더 다양한 분야에서 많아지겠지.(뭐, 지금도 일부 장르에서는 어느정도 수요가 있으니 번역서라도 나온 것이겠지만)







탐린님에게 덧글 달기 응답 취소