이코드가 비주얼 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
함수를 사용하는것을 권장하고있습니다.
댓글 입력