✅ 오늘의 문제 : 계단 만들기
어떠한 양수를 입력받은 뒤, 그 양수와 같은 층의 계단을 만들어보세요
- GotoXY 함수만을 사용하세요
(코뮤니티 모각코 과정 中 출제되어 푼 문제입니다.)
콘솔창의 출력 위치 변경하기
#include <windows.h>
먼저 <windows.h> 헤더 파일을 include 시켜줌!
<windows.h> 헤더파일 내에는 "윈도우 개발자들이 필요한 모든 매크로와 함수들"을 포함하고 있음
즉, "콘솔의 위치를 지정할 수 있는 함수"를 포함하고 있다!
그럼 콘솔의 출력 위치를 변경하는 함수를 만들어봅시다!
보통 GotoXY 라는 이름으로 작성하는, 널리 퍼진 함수 형태임 !!
Void GotoXY(int x, int y)
{
COORD Pos;
Pos.X = x;
Pos.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
}
자...이제 GotoXY 함수를 하나하나 뜯어서 분석해보겠슴다
우선 첫째 줄에 있는 COORD는 무엇일까요?
COORD
COORD의 실제 형태:
typedef struct _COORD {
SHORT X;
SHORT Y;
} COORD, *PCOORD
COORD 라는 구조체는 선언되어 있는 x, y 값을 저장하는 역할!
SetConsoleCursorPosition
BOOL WINAPI SetConsoleCursorPosition(
_In_ HANDLE hConsoleOutput,
_In_ COORD dwCursorPosition
);
이 함수는 "콘솔의 핸들 값"과 "좌표값"을 받아서, 해당 위치로 콘솔의 커서를 이동시킴!
콘솔의 핸들값이란, 쉽게 말해 콘솔이 가지는 ID를 말합니당
GetStdHandle(STD_OUTPUT_HANDLE)
콘솔의 ID는 어떻게 구할까요
아래와 같이 리턴받을 수 있음!
GetStdHandle(STD_OUTPUT_HANDLE)
문제 풀이
[초안]
//어떠한 양수를 입력 받은 뒤, 그 양수와 같은 층의 계단을 만들어 보세요.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <windows.h>
void GotoXY(int x, int y)
{
COORD Pos;
Pos.X = x;
Pos.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
}
int main() {
int x = 0, y = 1;
int n; // 층 수
printf("양수를 입력하세요: ");
scanf("%d", &n);
for (int i = 0; i < n; i++) { //층 반복
GotoXY(x, y);
printf("ㄱ");
x++; y++;
}
return 0;
}
x, y 좌표를 어떻게 증가 시킬 지 고민하다 x, y라는 변수를 main 함수에 추가시켜 썼는데,
굳이 저렇게 쓸 필요 없이 반복문 내에서 x를 i로, y를 i + 1로 적는 게 더 깔끔할 것 같다고 조언해주심!
그리고 GotoXY함수 형태는 항상 저렇게 쓰이는 건지 궁금해서 여쭤봤더니,
보통 저런 형태로 쓴다고 함! 불필요한 코드를 최소화하고, 필요한 부분만 취한 형태!!
조언해주신 걸 바탕으로 수정...
//어떠한 양수를 입력 받은 뒤, 그 양수와 같은 층의 계단을 만들어 보세요.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <windows.h>
void GotoXY(int x, int y)
{
COORD Pos;
Pos.X = x;
Pos.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
}
int main() {
int n; // 층 수
printf("양수를 입력하세요: ");
scanf("%d", &n);
for (int i = 0; i < n; i++) { //층 반복
GotoXY(i, i + 1);
printf("ㄱ");
}
return 0;
}
와 이렇게 되는 건 생각도 못했다...!
x++;이랑 y++; 까지 사라지는군
아주만족ㅠㅠ
'ProgrammingLanguage > C언어' 카테고리의 다른 글
C언어 | 헤더파일 예제, #ifndef, #pragma once (0) | 2021.02.19 |
---|---|
C언어 | 문자열 함수, 버퍼, 버퍼 비우기 예제 (0) | 2021.02.19 |
C언어 | 동적 메모리 할당 예제(2) (0) | 2021.02.18 |
C언어 | 동적 메모리 할당 예제 (0) | 2021.02.16 |
C언어 | continue문 예제 (0) | 2021.02.14 |