다중키 입력이 가능한 GetAsyncKeyState C언어 / C++에서 입력키의 정보를 알아오기 위해 _getch()를 종종 사용하고는 합니다. 하지만 _getch() 함수는 마지막에 누른 키 하나만을 입력받습니다. 그렇기에 좌,우,상,하 키를 동시에 입력받지 못하여 "대각선 이동" 모션을 할수가 없습니다. 게임을 개발하기 위해서는 _getch()함수보다는 GetAsyncKeyState()함수를 사용하도록 합시다. GetAsyncKeyState()함수는 입력을 멀티로 받을 수 있습니다. →키와 ↑키를 동시에 누른다면 오른쪽 위의 대각선 방향으로 이동을 할 수 있게됩니다. GetAsyncKeyState 사용법 SHORT GetAsyncKeyState(int vKey) 함수의 형태는 위와 같습니다. 인자값..
콘솔 개발을 할때 화면에 커서가 계속해서 깜빡깜빡 거리고 있다면 화면이 지저분한 느낌을 줍니다. 이번 포스팅에서는 화면의 커서의 굵기를 조절하거나 없애버리는 방법에 대해 포스팅 해보려고 합니다. 커서 안보이게 숨기기 #include #include void CursorView() { CONSOLE_CURSOR_INFO cursorInfo = { 0, }; cursorInfo.dwSize = 1; //커서 굵기 (1 ~ 100) cursorInfo.bVisible = FALSE; //커서 Visible TRUE(보임) FALSE(숨김) SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursorInfo); } int main() { CursorView();..
콘솔 화면의 특정위치에 출력을 하기 위해 줄바꿈 printf("\n") 으로 이동한다면 화면이 밀릴 수 있어 화면이 깨질 위험이 있습니다. 그러므로 특정위치에 출력을 할때는 커서를 해당 좌표로 이동시킨 뒤 확실하게 출력하는 방법을 써야합니다. SetConsoleCursorPosition 함수를 통해 커서 이동 void gotoxy(int x, int y){ //x, y 좌표 설정 COORD pos={x,y}; //커서 이동 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos); } windowswindows.h 헤더에 존재하는 SetConsoleCursorPosition 으로 좌표를 이동시킬 수 있습니다. 대부분 위와 같이 gotoxy라는 함수를..
파일을 입출력할 때는 먼저 파일 스트림을 생성해야 합니다. 그리고 이 파일 스트림을 생성하려면 파일 포인터가 필요합니다. 파일 포인터는 파일에 접근하는 데 사용되는 FILE 구조체 포인터를 말합니다. 즉, 파일 스트림의 실체가 FILE 구조체 포인터입니다. 이처럼 파일 스트림(FILE 구조체 포인터)을 생성하고 파일을 fopen() 함수를 활용하여 연 뒤 여러 가지 파일 입출력 함수를 이용해서 입출력 작업을 할 수 있습니다. 파일 입출력이 끝난 후에는 파일 포인터를 fclose() 함수를 활용해서 닫아주면 됩니다. 파일 입출력 과정 1. 파일 스트림을 생성한다.(파일 포인터 생성) 2. 파일을 연다. fopen()함수 사용 3. 파일 입출력을 수행한다. 4. 파일을 닫는다. fclose()함수 사용 TX..
이전 포스팅에서 컴퓨터에서 정밀한 시간 측정방법과 C언어 / C++에서 측정된 시간을 clock, getTickcount, timeGetTime함수를 통해 사용할 수 있는 방법을 알아보았습니다. 하지만 이 함수들은 전부 밀리초까지만 측정이 가능하여 그 보다 더 정밀하게는 측정이 불가능하다는 단점이 있었습니다. 이러한 단점을 보완하고자 C++ 11부터 chrono 함수가 새롭게 추가되어 나노초까지 측정할 수 있게 되었습니다. 측정방식은 CPU의 클럭 기준 (3G CPU면 300만 분의 1)이라고 합니다. [수학] 초 단위 종류 (극 미세 시간) + 변환 사이트 나노초 단위 측정이 필요한가? 사실 나노초 단위의 측정이 필요한지는 의문입니다. 기존의 밀리초 단위의 계측만으로도 충분하다는 생각때문입니다. 프로그..
이전 포스팅에서 C언어 / C++에서 정밀한 시간 측정하는 방법인 clock, getTickcount, timeGetTime 함수들에 대해서 알아보았습니다. 코딩을 하다보면 은근히 경과시간을 구해야할 경우가 많습니다. 이 함수들을 활용해서 경과시간을 측정하는 타이머도 만들 수 있습니다. 정밀한 시간 측정 방법이 궁금하시다면 아래 글을 참고해주세요. [C언어/C++] 정밀한 시간 측정 (clock, getTickcount, timeGetTime) 함수의 차이와 사용법 C언어 / C++ 타이머(스톱워치) 만들기 #include #include #include int main() { clock_t start = clock(); for (;;) { clock_t end = clock(); double time ..
C언어나 C++에서 제공하고 있는 시간을 측정하는 함수들이 많이 있습니다. 그중에서는 time함수도 있습니다. 하지만 time함수의 경우 시간을 초(s) 단위 측정까지만 가능하므로 정밀한 시간측정에는 부적합한 함수 입니다. [C언어/C++] 현재 날짜/시간 원하는 형태로 출력하기 (time, localtime) 정밀한 시간 측정하기 어떻게 하면 컴퓨터에서 정밀한 시간을 측정할 수 있을까요? 사실 C언어나 C++같은 프로그래밍 언어에서 시간을 측정할 수 있는 기능을 제공하는 것은 아닙니다. 시간을 측정한다는것 자체가 OS의 힘을 빌려야만 가능합니다. 윈도우에서 여러가지 시간을 측정할 수 있는 함수들을 만들어놓고 그것을 C언어나 C++같은 프로그래밍 언어에서 그대로 가져다 쓰는것 뿐입니다. 그렇다면 OS에서..
double형이나 floot같은 실수형 변수들을 사용하다보면 자릿수가 너무 길어 적절한 시기에 올림이나 반올림, 버림등을 해서 사용하고 싶은 경우가 있습니다. 이런경우 math 헤더안에 있는 cell(올림), round(반올림), floor(버림) 함수를 사용하시면 됩니다. C언어의 경우 반올림을 구하는 round()함수가 따로 없어서 round함수 대신 다른 방법을 사용해야 합니다. 올림(cell), 반올림(round), 내림(floor) 함수 사용법 #include //C언어 #include //C++ //C언어 double ceil(double n); //올림 double floor(double n); //내림 //C++ double ceil(double n); //올림 float ceil(floa..
코딩을 하다보면 가끔 숫자의 절대값이 필요한 경우가 있습니다. 이런 경우 따로 알고리즘 구현없이 abs, labs, fabs라는 절대값 반환 함수를 활용하여 절대값 숫자를 반환받을 수 있습니다. 절대값 반환 함수(abs, labs, fabs) 사용법 //C언어 헤더 #include //abs, labs #include //abs, labs, fabs //C++ 헤더 #include //abs, labs, fabs #include //abs, labs, fabs //사용법 int abs(int n); long labs(long n); double fabs(double n); sqrt절대값 함수를 사용하려면 절대값 함수들이 포함되어 있는 math헤더를 include해야합니다. C++은 cmath을 포함하시면..
C언어나 C++에서 특정 값의 제곱근(루트)을 구하려면 math 헤더에 있는 sqrt함수를 사용하시면 됩니다. 해당함수를 사용하면 따로 알고리즘 구현없이도 함수 호출 한번으로도 원하는 값을 얻어낼 수 있습니다. sqrt 함수 사용법 #include //C언어 #include //C++ //C언어 double sqrt(double n) //C++ double sqrt(double n) float sqrt(float n) long double sqrt(long double n) sqrt함수를 사용하려면 sqrt함수가 포함되어 있는 math헤더를 include해야합니다. C++은 cmath을 포함하시면 됩니다. 제곱을 구할때 사용하는 pow함수와 같이 C언어는 오버로딩이 안되기에 리턴값이 double로 고정되..
C언어나 C++에서 특정 값의 제곱을 구하려면 math 헤더에 있는 pow함수를 사용하시면 됩니다. 해당함수를 사용하면 따로 알고리즘 구현없이도 함수 호출 한번으로 원하는 값을 얻어낼 수 있습니다. pow함수 사용법 #include //C언어 #include //C++ //C언어 double pow(double base, double n) //C++ double pow(double base, double n) float pow(float base, float n) long double pow(long double base, long double n) pow함수를 사용하려면 먼저 pow함수가 포함되어 있는 math헤더를 include해야합니다. C++은 cmath입니다. C언어는 리턴값이 double로 고..
대문자와 소문자의 아스키코드값은 32만큼의 차이가 납니다. 아스키 코드값이 다르기 때문에 컴퓨터에서는 'A'와 'a'를 같은 값으로 인식하지 않습니다. 대문자와 소문자를 같은값으로 인식시켜주기 위해서는 대문자이든 소문자이든 하나로 통일을 시켜주어야 합니다. 이러한 특징을 활용하여 대문자는 32를 더해서 소문자로 치환할 수 있고 반대로 소문자는 32를 빼주어 대문자로 치환할 수 있습니다. #include void main() { char input[1000]; int count = 0; printf("문자열을 입력하세요 \n"); gets_s(input); while (input[count]) { if (input[count] >= 65 && input[count] = 97 && input[count] 대..
모든 문자들은 아스키코드값으로 이루어져 있습니다. 숫자는 48 ~ 57까지 대문자는 65 ~ 90까지 소문자는 97 ~ 122번까지로 구성되어 있죠. 이러한 특성을 활용한다면 문자열을 판별하여 해당 문자가 대문자인지 소문자인지 숫자인지 특수 기호인지를 구분할 수 있는 프로그램을 만들 수 있습니다. #include void main() { char input[1000]; int temp1 = 0, temp2 = 0, temp3 = 0, temp4 = 0; int count = 0; printf("문자열을 입력하세요 \n"); gets_s(input); while (input[count]) { if (input[count] >= 65 && input[count] = 97 && input[count] = 48..