이코드가 비주얼 2019 C++에서 실행이안되요

조회수 841회
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <conio.h>

void gotoxy(int x, int y)

{

    COORD pos = { x,y };

    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);

}

void ma_in(void) {

    printf("▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩\n\t\t\tTHE 파쿠르\n▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩▩\n\n\n\n\n시작하려면 s키를 누르세요!");
    char a;
    a = getch();
    while (1) {
        if (a == 115) {
            system("cls");
            break;
        }
    }
}
void move(void){

    int a, x = 0, y = 0;
    while (1) {
        a = getch();
        if (a == 114) {
            y--;
        }
        else if (a == 115) {
            y++;
        }
        else if (a == 97) {
            x--;
        }
        else {
            x = x;
        }
        gotoxy(x, y);
        printf("a");
        Sleep(50);
        system("cls");
    }
}

int main() {

    int xy[30][30];
RE:
    ma_in();

    system("cls");
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 3);
    printf(" 이동: wsad, 활성화:F");
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0);
    move();
}

1 답변

  • 질문을 올려주실때에는 가능하면 내가 의도한 결과가 무엇이고, 어떤 문제가 발생하였고, 예상하는 원인은 무엇인지를 상세하게 올려주시면 조금 더 원하시는 답변을 들을 확률이 높습니다.

    기본적으로 올려주신 코드는 컴파일 자체가 안될것이기때문에 컴파일이 잘 되는것을 원하시는 답변이라고 생각하고 말씀드리도록 하겠습니다 !

    올려주신 코드 20라인32라인a = getch();라는 코드를 입력해주셨습니다.

    이상태에서 최신 버전 비주얼 스튜디오로 컴파일을 진행하면, 아래와 같은 에러 문구가 나올것입니다.

    오류 C4996 'getch': The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name: _getch.
    

    여기서 deprecated라는 단어가 중요한데요,
    deprecated되었다는 것은 옛날에는 사용되었지만 더 이상 사용하지 않는 함수라는 의미라고 보시면 될것같습니다.

    함수가 구현 된 후 시간이 지나 이 함수가 뭔가 문제가 있다는것이 발견되어(대부분은 보안적 결함입니다.) 함수를 만든 사람이 이를 보완한 새로운 함수를 만들었는데,
    기존에 이 함수를 쓰고있는 프로그램이 의도와 다르게 작동하는것을 방지하기 위해
    보완된 함수는 새로운 이름으로 함수를 만들고 옛날 함수를 사용하는 경우 더이상 이 함수를 사용하지 말라 라고 경고하는것입니다.

    이를 해결하기 위한 가장 최고의 방법은 에러 메세지에 나와있는대로
    a = getch() 이 부분을 a = _getch()이렇게 변경된 함수로 대체하는것입니다.

    또한가지 이를 해결하는 방법이 있긴한데 소스코드 최상단에
    #pragma warning(disable: 4996)라는 코드를 입력해주시면
    컴파일러에게 나는 강제로 옛날 함수를 사용할것이야. 라고 알려주게되는것이고 결과적으로는 컴파일이 되긴하나,
    이 방법은 특별한 사유가 없는상황이라면 권장하지 않습니다.

    C언어 공부중 또 이런 문제가 발생하는 대중적인 예시를 하나 들어드리자면 scanf함수입니다.
    옛날에 쓰여진 책들은 입력을 받을 때 scanf함수를 이용하라고 써있는데,
    최신버전의 비주얼스튜디오 컴파일러는 scanf_s함수를 사용하는것을 권장하고있습니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)