전체보기293 콘솔 깜박임 없애는 방법 (쉬운 더블 버퍼링) 콘솔 게임이나 애니메이션 효과를 낼 때 깜박임을 없애는 방법에 대해 얘기해보려 합니다. [깜박임의 발생 원인] system("cls") 명령어를 통해 콘솔의 내용을 지우고 다시 쓰고 하는 방식을 사용할 때 화면을 까맣게 지웠다 새로 썼다 하므로 깜박임이 발생 [깜박임 없애는 방법] 1. gotoxy() 함수를 사용해 출력 좌표를 고정시킨 뒤 같은 내용을 반복 출력 기존 화면을 지우지 않고 덮어쓰기 출력을 함으로써 깜박임을 최소화 출력 사이즈가 커지거나 반복 횟수가 늘어나면 여전히 깜박임 발생 2. 더블 버퍼링 사용 일단 다른 곳에 출력을 먼저한 뒤, 현재 화면과 빠르게 바꿔치기 함 현재 대부분의 그래픽 인터페이스에서 사용하는 방식 위 두 가지 중 더블 버퍼링 사용에 대해 알아보겠습니다. 인터넷에.. ▸C언어/개발 TIP 2019. 12. 5. atoi() 함수 없이 문자열의 숫자를 int타입으로 변환 아래와 같이 char 타입은 int 타입과 같이 바로 정수 계산이 됩니다. 정수형으로 데이터를 저장하기 때문에, 연산자 계산 시 int 타입 계산과 동일 정수형("%d")으로 출력하면 int형과 동일하게 출력됨 (다만 int타입은 4byte, char타입은 1byte) 문자형("%c")으로 출력하면, 저장하고 있는 정수가 표현하는 아스키코드상의 문자를 출력해줌 이러한 특성 때문에 char타입은 int타입과 동일하게 작동하고, 다만 1byte로 사이즈만 작다고 볼 수 있습니다. 하지만 문자열(String)에서는 아래와같이 다른 결과가 나옵니다. 숫자도 무조건 문자로 인식해서 아스키코드의 번호로 저장 (즉, '문자 1 == 아스키코드 49' 로 저장) 출력할때도 하나하나 아스키코드→문자열로 변환해서 .. ▸C언어/개발 TIP 2019. 12. 5. Debug 모드에서 sprintf_s() 함수 사용 시 주의사항 문자열(String) 작업을 하다가 sprintf_s() 함수를 써서 붙이고 진행하는데 계산이 꼬이는 문제가 발생해서 이것저것 해보다보니 신기한게 보여서 정리합니다. 예를 들어 아래 코드를 Debug 모드에서 실행했을 때 결과입니다. 분명 char* str에 할당된 공간을 모두 '\0'값으로 초기화 시켜줬음에도 불구하고 공백이 생겨납니다. void main() { char* str = (char*)malloc(sizeof(char) * 30); /* 초기화 */ for (int i = 0; i < 30; ++i) str[i] = '\0'; printf("\n\n "); int a = 1; sprintf_s(str, sizeof(int), "%d", a); *(str + strlen(str)) = 'a';.. ▸C언어/개발 TIP 2019. 12. 5. stdio.h_파일제어 (fopen, fopen_s, fclose) fopen : 파일을 열어줌 fclose : 파일을 닫아줌 fopen_s : 파일을 열어줌 (C11 이후) [ fopen ] 파일을 연다는 의미는 디스크에 저장된 파일 내용을 메모리에 올린다는 의미 메모리에 올라온 파일 내용의 첫 주소를 반환해줌 (FILE 타입 포인터 변수에 저장하면 됨) 주소를 직접 찍어주거나 파일 이름만 넣을 경우 기본 위치에서 가져옴 exe파일로 직접 실행할 때는 해당 파일이 있는 위치가 기본 위치 소스 파일로 IDE(비주얼 스튜디오)에서 실행할경우 해당 소스 파일 위치가 기본 위치 IDE에 따라 기본 위치는 다를 수 있음 FILE* fp = fopen("파일이름.txt", "모드"); r 읽기 - 파일 없으면 NULL값 반환 w 쓰기 - 파일 없으면 새로 생성 - 파일 있으면 내.. ▸C언어/기본함수 및 구현식 2019. 12. 5. string.h_strtok_문자열 나누기 (구현식 포함) [ strtok ] 기준 문자열에 포함된 문자를 기준으로 나눠줌 문자열 자체를 찾는게 아닌, 포함된 문자 하나하나가 기준이 됨 strtok(str, "#@!")로 썼을 때, '#'이 나오거나 '@'가 나오거나 '!'가 나오면 끊어줌 끊고난 다음 위치를 기억하고 있다가 문자열 대신 NULL을 넘겨주면 그 위치부터 다시 시작 NULL이 아닌 새로운 문자열을 제공해주면 리셋 검색된 기준 문자는 '\0'로 바꿔줌 (원본이 훼손됨) 시작위치부터 구분자가 연속으로 나올 경우 무시하고 지나감 (####과 같이) 문자열의 끝에 도달하면 NULL값 반환 #include #include int main() { char str[] = "abc#def@@#@ !g"; char* ptr = strtok(str, "#@!"); .. ▸C언어/기본함수 및 구현식 2019. 12. 5. string.h_strcmp, strcnmp_문자열 비교 (구현식 포함) [ strcmp ] 문자열 비교 (대소문자 구분) 앞의 문자가 더 크면 1 값이 같으면 0 뒤의 문자가 더 크면 -1 [ strncmp ] 지정한 갯수만큼만 앞에서부터 비교 #include #include int main() { char str1[] = "abcdef"; char str2[] = "abcdaa"; char str3[] = "abcdzz"; char str4[] = "abcdef"; printf("%d ", strcmp(str1, str2));// 1 (앞의 문자가 더 큼) printf("%d ", strcmp(str1, str3));// -1 (뒤의 문자가 더 큼) printf("%d ", strcmp(str1, str4));// 0 (같음) printf("%d ", strncmp(st.. ▸C언어/기본함수 및 구현식 2019. 12. 5. C언어의 메모리_스택 메모리 [2/2] C언어로 만든 프로그램은 함수 호출로 시작해서 함수 호출로 끝난다고 해도 무방합니다. 다른 언어도 근본적으로는 모두 똑같습니다. 함수를 효율적으로 처리하기 위해 사용되는 메모리가 바로 스택 메모리입니다. [ 스택 메모리 ] 앞서 말한 네 가지 영역 중 스택 세그먼트(Stack Segment) 전체를 의미 함수 실행을 위해 동적 할당 되는 메모리 공간 후입선출(LIFO - Last Input First Out) 방식으로 작동 [ 스택 프레임 (Stack Frame)] 스택 영역(Stack Segment) 내에서 하나의 함수 실행을 위해 할당받는 메모리 덩어리 후입선출이란, 이 스택 프레임이 순서대로 쌓이고 마지막 스택 프레임이 먼저 빠지는 것을 의미 [ C언어의 함수란? ] 프로그램 안에서 자주 쓰이는 .. ▸C언어/기본 상식 2019. 12. 5. C언어의 메모리_기본 구조 [1/2] C언어의 메모리 구조를 살펴보겠습니다. 디테일하지 않게 추상화하여 정리했습니다. 먼저 C언어에서 사용하는 메모리의 구조 입니다. 사실 다른 언어들도 같은 구조를 사용하지만 사용하는 방법이나 각 segment를 사용하는 용도가 조금씩 다릅니다. 1. 코드 영역 (Code Segment) 먼저 프로그램이 실행되면 프로그램의 실행 명령어인 바이너리 코드가 코드 영역에 저장됩니다. 코드 자체에 포함된 문자열이나 상수 또한 프로그램 실행 시 절대 변경되면 안되기 때문에 코드 영역에 저장됩니다. 텍스트 영역( (Text Segment)이라고도 함 컴파일되어 바이너리 코드(기계어) 형태로 저장된 영역 코드에 직접적으로 적혀있는 문자열(String)과 상수 또한 코드 영역에 저장됨 프로그램 실행 시 절대 변경되면 .. ▸C언어/기본 상식 2019. 12. 5. 이전 1 ··· 17 18 19 20 다음 💲 추천 글 반응형