▸C언어/개발 TIP5 조건문(if)과 증감연산자(i++) 사용시 주의사항 후위 또는 전위 증감연산자 ++이나 --는 코드를 읽고 지나가기만 하면 작동됩니다. 쓰임은 다들 아실테지만 조건문에 잘 못 넣어서 의도와 다르게 작동할 때가 종종 있습니다. 아래 코드의 결과는 3입니다. 조건절에 하나도 걸린게 없음에도 i의 값이 3 증가되었습니다. if문의 조건을 세 번 통과하면서 ++i 가 작동했기 때문입니다. 만약 조건에 맞았을 때 i가 증가하도록 의도했다면 오작동하게 됩니다. 따라서 의도한 바가 아니라면 if문의 조건식 안에는 증감연산자를 넣지 않는 것이 좋습니다. #include int main() { int i = 0; if (++i == 12) puts("ㅇ.ㅇ"); else if (++i == 12) puts("ㅇ.ㅇ"); else if (++i == 12) puts(".. ▸C언어/개발 TIP 2019. 12. 5. 삼항연산자(3항연산자) 사용법 (if문 대체) 가끔 if문이 길어지면 보기가 불편할 때가 있습니다. 간단한 if문을 대체할 수 있는 삼항연산자의 사용법입니다. [ 문법 ] 조건 ? 참일경우 실행할 내용 : 거짓일경우 실행할 내용; int main() { int a = 200; int b = 100; a > b ? printf("a가 크네") : printf("b가 크네"); } 위와 같이 문법은 매우 간단합니다. 다시 응용을 좀 해보자면 아래와 같이 쓸 수도 있습니다. 1. 실행할 내용이 변수에 값을 넣어줄 때 (변수가 하나) 연산자 우선순위로 인해, c = (a > b ? 1 : 0); 방식으로 실행됨 삼항 연산자부터 실행해서 값을 가져온 뒤, c에다가 넣어줌 int main() { int a = 200; int b = 100; int c = .. ▸C언어/개발 TIP 2019. 12. 5. 콘솔 깜박임 없애는 방법 (쉬운 더블 버퍼링) 콘솔 게임이나 애니메이션 효과를 낼 때 깜박임을 없애는 방법에 대해 얘기해보려 합니다. [깜박임의 발생 원인] 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. 이전 1 다음 반응형