SPRING :: NOTE
[C/C++] for문을 이용하여 혼자 이동하는 문자만들기 본문
gotoxy를 이용하여 해당 단어를 배치하고 이동과 동시에 전 블럭에 있던 단어를 공백으로 바꿔준다,
결과는 >문자가 오른쪽으로 이동하는걸 확인할 수 있다.
#include
#include
#include
void gotoxy(int x,int y)
{
COORD pos={x,y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
void main()
{
int i;
for(i = 0; i <= 80; i++)
{
gotoxy(i, 10);
putch('>');
gotoxy(i-1,10);
putch(' ');
Sleep(100);
}
}
프로그램을 시작하자 마자 제어 변수 i를 1부터 시작해서 80까지 1씩 증가시키면서 >과 공백을 번갈아가며 출력한다.
실행해 보면 >문자가 최초 화면 왼쪽에 나타났다가 오른쪽 끝으로 한칸씩 이동할 것이다.
문자 하나만 움직이지만 이것도 일종의 애니메이션이라고 할 수 있다.
어떻게 해서 >이 움직이는지 분석해 보자.
루프를 돌 때 제어 변수가 어떻게 변하고 루프 내에서 제어 변수를 어떻게 사용하는지 차근 차근히 분석해 보자.
① 정수형 변수 i를 선언하고 clrscr 함수를 호출하여 화면을 깔끔하게 지웠다.
화면에 아무 것도 출력되어 있지 않아야 >문자가 움직이는 것을 제대로 살펴볼 수 있을 것이다.
여기까지는 프로그램이 실행을 준비하는 단계이다.
② for 루프가 시작되면 초기식에 의해 제어 변수 i는 1이 된다.
조건식은 i가 80보다 작거나 같다이고 증감식은 i를 1씩 증가하도록 되어 있으므로 i는 1부터 2,3,4,....80까지 변할 것이다.
루프안에는 >문자를 출력하는 명령, 공백을 출력하는 명령, 그리고 0.1초간 시간을 끄는 명령이 포함되어 있다.
③ 최초 루프가 시작될 때 i는 1의 값을 가지고 있다. 그래서 (1,10)의 위치에 >이 출력되고 (0,10)의 위치에 공백이 출력된다.
이때 화면에는 (1,10)에 >문자 하나만 출력되어 있을 것이다. 0.1초간 대기한 후 증감식에 의해 i는 2가 되고 다음 루프가 실행된다.
④ i가 2가 되었을 때는 (2,10)에 >이 출력되고 그 바로 왼쪽인 (1,10)에 공백이 출력된다.
공백이 출력되는 좌표는 제어 변수 i의 바로 왼쪽 위치인 (i-1,10)인데 이 좌표는 바로 직전의 루프에서 >을 출력한 좌표이다.
이 좌표에 공백을 출력한다는 것은 바로 앞에서 출력했던 >을 삭제하라는 명령이다.
두 번째 루프에 의해 (1,10)의 >은 지워지고 (2,10)에 >이 새로 출력되었으므로 마치 >이 한칸 오른쪽으로 이동한 것처럼 보인다.
⑤ i가 3이 되면 (3,10)에 새로운 >이 출력되고 바로 직전 루프에서 출력해 놓은 (2,10)의 >은 공백으로 덮여져 삭제된다.
이런 식으로 루프가 진행되면 1씩 증가하는 i위치에 >이 새로 출력되므로 마치 >이 오른쪽으로 이동하는 것처럼 보이게 된다.
출처 : http://www.soen.kr/
'Development Language > C · C++ · MFC' 카테고리의 다른 글
[C] 윈도우 기반 서버/클라이언트 예제 (0) | 2016.06.09 |
---|---|
[C] 포인터 예제 소스 및 설명 (1) | 2016.06.09 |
[C] 윤년과 평년 구하는 프로그램 (0) | 2016.06.09 |
[C/C++] 입력문 (scanf) (0) | 2016.06.08 |
[C/C++] 출력 서식 종류와 의미, 설명, 예제 (0) | 2016.06.08 |