본문 바로가기

프로그래밍

[C, C++] 한글 입출력(printf, scanf) 시 오류가 날 때 해결 방법

띠용~~~~~

위 사진이 뭐냐면, 위에서 이름, 나이, 취미를 입력받고
아래에서 입력받은 내용을 출력하는 코드를 실행한 결과이다.
그런데 결과가 이상하다. 띠용!
보다시피 입력부분이 정상적으로 출력되지 않고 @로 대치되는데,
운이 좋다면 공백 또는 p, ` 등 오만 이상한 글자를 만나볼 수 있다.
또 입력뿐만 아니라 printf로 단순출력 시에도 한글이 깨지는 경우가 왕왕 있다.
내가 이걸로 2시간 고생했기 때문에 오늘은 1. 한글 출력시 깨지는 경우와 2. 위 오류의 해결방법을 쓰도록 하겠다.

1. 한글 출력 시 깨지는 경우

?대쫫이겠냐구,,,

아마 ide를 처음 설치한 후 한글을 입출력하게 되면 위와 같은 외계어에 맞닦뜨리는 분들이 많을 것이다.
일단 한글을 출력했더니 깨질 때에는 여러 해결 방법이 있는데,
제일 많이 사용하는 방법은 2가지가 있는 것 같다.

가. 파일 자체 인코딩을 EUC-KR로 변경

VS 2022의 경우 '다른 이름으로 저장'을 누르면 인코딩 옵션을 변경할 수 있다.
VScode의 경우, 창 하단에 보면 아래와 같이 생긴 표시줄이 있다.

저기 EUC-KR라고 표시되어 있는 부분에 보통은 디폴트로 UTF-8이 들어가 있는데
그 부분을 클릭하면 이런 창이 뜬다.

인코딩하여 저장을 선택하면 아래와 같이 선택할 수 있는데, 이 때 EUC-KR를 선택해주면 된다.

나. 제어판-국가 또는 지역-시스템 로캘 설정-UTF8 옵션 체크

이 옵션을 체크하면 UTF-8로 인코딩된 파일도 한글 출력 시 깨지지 않는다!
그런데...후술하겠지만 내가 겪었던 문제의 원흉이 바로 이 옵션이었다 ,,,
한글을 입력받아오는 일이 없다면 이 방법으로 해결해도 문제는 없을 것 같다.

제어판으로 들어가 '국가 또는 지역'을 선택한다.

그러면 이 창이 뜨는데, 시스템 로캘 변경 메뉴를 클릭한다.

체크박스에 체크해주면 UTF-8로 인코딩된 파일도 한글 출력이 잘 된다.
이 경우에는 EUC-KR로 인코딩하면 오히려 깨져보인다.

2. 한글 입력받은 후 출력 시 공백 등으로 대치되어 정상적으로 출력되지 않는 오류

맨 위에 나와있는 사진과 같은 오류이다.
터미널 문제인지 vscode 문제인지 무슨 문제인지 모르겠어서 한참 찾았는데,
혹시 시스템 로캘 변경에서 UTF-8 사용 옵션이 켜져 있다면 체크 해제해주고
파일을 EUC-KR로 다시 인코딩해주면 정상적으로 출력된다.
아무래도 scanf로 한글을 받아오는 과정에서 UTF-8 인코딩이 문제를 일으키는 듯 하다...

야호.

아직도 이걸로 2시간 잡아먹었다는 것이 믿기지 않는다,,,따흑
혹시나 문제를 겪고 있는 분들이 계시다면 참고하시길.