프로그래밍

 3198, 1/160 회원가입  로그인  
   mystell
   getch함수 질문입니다.

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=6455 [복사]


제가 작성중인 소스 입니다.


#include <iostream>
#include <stdio.h>
#include <conio.h>
#include "main.h"

using namespace std;

void start::printout()
{
        Hp = 10000;
        _key[0] = '1';

        while(_key[0] != 0)
        {
                
                _key[0] = getch();

                getch();

                switch(_key[0])
                {
                case 'd':
                        
                        system("cls");
                        
                        printf("ㅡㅡㅡㅡ\n■□□□");
                        _key[0] = 1;
                        break;

                case 'f':

                        system("cls");
                        
                        printf("ㅡㅡㅡㅡ\n□■□□");
                        _key[0] = 1;
                        break;

                case 'j':

                        system("cls");
                        
                        printf("ㅡㅡㅡㅡ\n□□■□");
                        _key[0] = 1;
                        break;

                case 'k':

                        system("cls");
                        
                        printf("ㅡㅡㅡㅡ\n□□□■");
                        _key[0] = 1;
                        break;

                default:

                        system("cls");
                        _key[0] = 0;
                        break;
                
                }

                

        }
}

준비단계로 간단하게 '키 입력별로 일정 값이 출력되게 하는 함수'를 구성 중인 초보입니다.

getch(); 를 써서 엔터없이 바로바로 입력이 되게 하려 합니다만.

정작 실행해 보면 반응이 이상합니다.

예를 들어 'd' 키를 한번 입력한뒤에는 콘솔창에 아무런 출력도 되지 않고 있다가

그후에 아무키나 한번 더 눌러야만 값이 출력 되고 있습니다.

ex)

'd' 를 한번 눌렀을때

            l
            l
            l
ㅡㅡㅡㅡ
□□□□                      


'd' 를 한번 누른뒤 아무키나 한번 더 눌렀을때

             l
             l
             l
ㅡㅡㅡㅡ
■□□□


getch(); 함수가 원래 이런 함수였나요?
아니면 혹시 제가 소스작성중에 잘못한점이 있나요?

가르쳐주세요 ㅠㅠ

  Hit : 6268     Date : 2014/04/11 06:02



    
yuka1915 getch() 함수자체는 원래 아무런키나 하나더 입력받는용으로 사용됩니다.
쉽게 예시를들자면 프로그램을 만든경우에 대부분의 프로그램은 특별한 처리를 하지않으면 자동으로 종료되는데요.
그걸 막기위해서 주로 쓰이는것이 for구문으로 무한루프처리를 하던가 system 함수를 사용하던가 아니면 getch() 함수를 사용합니다.
만약

#include<stdio.h>
#include<conio.h>

int main()
{
printf("Hi\n");
}
그냥 이렇게 작성하면 프로그램을 커맨드라인에서 실행하지않으면 바로 꺼지게되죠.
하지만
#include<stdio.h>
#include<conio.h>

int main()
{
printf("Hi\n");
_getch();
}

이런식으로 입력해주게되면 종료되지않게됩니다. 한글자 더 입력받아야하기때문이죠
2014/04/14  
mystell 그렇군요. 감사합니다.(다른 입력 함수를 찾아 봐야 겠네요;;) 2014/04/14  
yuhioh8 kbhit함수를 써보시면어떨까요


입력버퍼에 데이터가 있으면 true없으면 false를 출력해주는데요 키누르면 true 안누르면 false
if( kbhit())
{
char example1 = getch();
printf("%c", example1);

if( example1 == 13) //엔터값인데 키보드나 컴퓨터마다 다르더군요
{
printf("\n");
}

if(example1 == '1' // 임의의 수를 입력하면 종료 되게하는데 예시는 1을 넣으면 꺼지는 엔터키처럼 다를수잇습니다;
{
break;
}
}
== ' 여기' 여기 값에 알맞은 스캔코드값을 넣어주시면 됩니다
printf( "%c 의스캔코드는%d , example1, example1); 이렇게 알수 잇겟네요
2014/04/21  
wnsduddndud 키보드 스캔 코드의 길이가 2바이트이기 때문에 getch함수로 입력을 받으려면 getch함수를 두 번 연속해서 써야합니다
보통은 함수 형태로 만들어서
void getkey(char* a){
*a = getch();
if(*a == 0x00||*a == 0xe0) *a =getch();
}
와 같은 형태로 사용합니다
2018/03/04