2020년 7월 1일 수요일

_getch

개행문자, 공백 다 받고 에코도 없는 좋은 함수인 _getch().

이 _getch()로 뭘 얻을 때에는 주의할 게 있다.

입력시 입력버퍼에 2번 나뉘어 진다는 것.

그 이유는 컨트롤+c 처럼 두개의 key가 하나의 문자인 경우를 커버하기 위해서이다.

예를 들어 엔터를 _getch()로 받으면 엔터의 아스키코드인 13이 입력되고 버퍼에 0이 남아 있다.

방향키인 경우 -13이 들어오고 73, 75, 80 등이 입력된다.

그러니까 헛짓하지 않으러면 _getch를 두번써야한다.

아래는 _getch 시 어떻게 두번 나뉘는지 나타낸 코드다.

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

#include <string>

#include <conio.h>

#include <Windows.h>

int main()

{

string input = "";

int first;

int second;

char first_char = '1';

while(first_char!=13) {

if (_kbhit()) {

first =_getch();

second = _getch();

first_char = first;

cout << "in int first is " << first << endl;

cout << "in int second is " << second << endl;

if (first == 8) {

cout << "delete " << endl;

first_char = ' ';

input = input.substr(0, input.length() - 1);

cout << input << endl;

}

else {

input += first_char;

cout << input << endl;

}

}

}

}

댓글 없음:

댓글 쓰기

List