Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- dart
- 파일입출력
- 진수변환기
- Kotlin
- 딕셔너리
- 문자열파싱
- Android
- dictionary
- background service
- ws2_32.lib
- 연결리스트
- socket
- flutter
- 소켓프로그래밍
- C
- InfluxDB
- foreground service
- 콘솔 키보드 이벤트
- FTP
- UI
- Linked List
- vscode
- 코틀린
- InfluxDBClient
- 메모리반환
- vs code
- 자료구조
- 문자열 다루기
- 문자열다루기
- Mat 변수
Archives
- Today
- Total
무슨 일로 C 하셨습니까?
[C] 키보드 이벤트 본문
scanf() 함수를 쓰게되면 콘솔에 키보드 입력을 할 수 있다.
그러나 이러한 방식은 입력된 내용을 엔터 쳐서 넘기는 것인데
이러한 입력말고 콘솔창에서 키보드 입력에 즉각적으로 반응하도록 만들고 싶다.
거두절미하고 일단 만들어 보자
#include <stdio.h>
void f() {
int key;
while (1) {
key = getch();
printf("%d\n", key);
}
}
}
단순하다. key라는 변수가 getch()를 통해 입력을 하나씩 받으면 된다.
이런식으로 하나씩 다 찍어보면 키보드의 각 키들이 어떠한 입력을 나타내는지 알 수 있다.
이렇게 찍어보면 알 수 있는건 각 알파벳 키들이 아스키 코드와 일치한다는 점이고 엔터가 개행문자로 입력된다는 것 또한 알 수 있다.
그런데 특정 키는 224로 같은 값이 찍히는 것을 알 수 있다.
(방향키와 같은 특수키의 경우 그렇다는 데 방향키 말고는 본적이 없다.)
이러한 방향키의 값 또한 알아내고자 한다면
#include <stdio.h>
void d() {
int key;
while (1) {
key = getch();
printf("%d", key);
// 방향키 & 특수키
if (key == 224)
{
key = getch();
printf(" %d\n", key);
}
else {
puts("");
}
}
}
이렇게 입력을 두번 받아서 출력해보면 되겠다.
이걸 활용하면
#include <stdio.h>
#include<Windows.h>
#include<io.h>
void d() {
int key;
int x = 0, y = 0;
COORD pos = { x,y };
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 3);
system("cls");
while (1) {
key = getch();
system("cls");
// 방향키 & 특수키
if (key == 224)
{
key = getch();
switch (key) {
case 72: // 상
if(y>0)
y--;
break;
case 75: // 좌
if (x > 0)
x--;
break;
case 77: // 우
x++;
break;
case 80: // 하
y++;
break;
default:
break;
}
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
printf("●");
}
}
}
방향키를 누를때마다 동그라미가 돌아다니게 만들 수 있다.
이걸 잘 활용해서 게임이든 뭐든 만들 수 있다. 추후에 잘 활용해 보도록 하겠다.
'C - 이걸 굳이? > 유틸리티' 카테고리의 다른 글
[C] 파일 입출력::config 파일 만들기 (0) | 2021.05.16 |
---|---|
[C] 파일 입출력 (0) | 2021.05.12 |
[C] 문자열 다루기::문자열 복사 (0) | 2021.01.22 |
[C] 메모리 반환 (0) | 2020.10.15 |
[C] 자료구조::딕셔너리 (Dictionary) _ 2 (2) | 2020.10.15 |
Comments