아래와 같은 모양 만들기
o-----o | | | | | | o-----o
우선 필요한 요소들을
전역, 정적, 상수로 선언해준다
- 데이터와 로직의 분리
: 유지 보수가 쉬워지고, 가독성은 올라간다. 모양을 바꾸고 싶을 때 변수 값만 바꾸어 주면 됨- static(정적) 변수
: 프로그램이 종료되기 전까지 메모리가 소멸되지 않는 변수
: 빠르게 접근 가능하며 함수를 벗어나도 사라지지 않고 유지
: 초기화 할때 반드시 상수로 초기화, 하지 않으면 디폴트 0으로 자동 초기화 된다.- 정적 전역변수를 사용하면 현재 파일에서만 효력을 끼치는 변수가 된다. 같은 모양으로 다른 파일들을 생성하고 컴파일할때 현재 파일 범위 내에서만 변수가 유효하도록 구현
- 상수? 위의 요소는 실행중 변하지 않을 값이기 때문에!
- 포인터나 배열을 사용하지 않은 이유는 가독성 중심이기 때문에
주요 골자를 요약
1. 사각형이므로 너비, 높이로 간단한 2중 반복문 구조를 먼저작성funtion1
2. 행 번호, 너비 높이를 받아 한 행씩 출력하는 함수를 만듦
이 함수는 행 번호와 높이를 가지고 첫줄, 중간줄, 마지막 줄을 판별
판별 후 각 경우에 맞춰 너비와 상수3가지를 보냄print_row
3. 너비와 상수 3가지를 가지고 출력을 함
print_line
너비(width)과 높이(height) 개념을 통한 2중 반복문 구조를 작성한다.
첫 함수에는 너비와 높이의 크기가 매개변수로 들어온다.
반복문 구조 안에서 한 줄씩 출력할 것이기 때문에
현재 행을 나타내는 h_index를 변수로 선언해주었다.void function1(int width, int height) { int h_index; if (width <= 0 || height <= 0) { return ; } h_index = 0; while (h_index < height) { print_row(h_index, height, width); h_index++; } }
한줄씩 출력하는 함수를 작성한다
매개변수는 다음과같다
- h_index : 현재 행번호
- height : 높이 값
- width : 넓이 값
h_index에 따라 시작 행, 끝행, 나머지 경우의 3가지로 나뉘며
행 번호가 정해진 후 이므로,
print_line으로 (넓이, 왼쪽 첫번째, 가운데 채울 내용, 오른쪽 끝) 순으로 매개변수를 전달시킨다.void print_row(int h_index, int height, int width) { if (h_index == 0) { print_line(width, g_top_left_p, g_top_bottom_line, g_top_right_p); } else if (h_index == height - 1) { print_line(width, g_bottom_left_p, g_top_bottom_line, g_bottom_right_p); } else { print_line(width, g_left_right_line, g_space, g_left_right_line); } }
전달받은 내용을 토대로 한줄 씩 출력하기 위해서
현재 열을 나타내는 w_index를 변수로 선언해준다.
width만큼 반복문을 돌리며 전달 받은 사항을 토대로 출력해준다.void print_line(int width, char left_point, char line, char right_point) { int w_index; w_index = 0; while (w_index < width) { if (w_index == 0) { ft_putchar(left_point); } else if (w_index == width - 1) { ft_putchar(right_point); } else { ft_putchar(line); } w_index++; } ft_putchar('\n'); }