Inflearn brand logo image

인프런 커뮤니티 질문&답변

kdy4071님의 프로필 이미지
kdy4071

작성한 질문수

독하게 시작하는 C 프로그래밍

getchar()함수의 반환형에 대해 질문드립니다.

해결된 질문

작성

·

73

0

안녕하세요. 공부할 때 chat gpt를 자주 활용하고 있습니다. chat gpt에 따르면 getchar()함수를 반환하려면

char a;

a = getchar();

가 아니라

int a;

a = getchar();

int형으로 반환을 받아야한다고 하더라구요.

EOF를 구분하기 위해서라는데...

그런데 예제들을 보면 char형으로 받는 예제들도 많아서 질문드립니다.

감사합니다.

답변 2

0

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

음....EOF는 통상 -1입니다. 그래서 라는 의견도 좋지만 저는 개인적으로 생각이 좀 다릅니다. '문자 하나'가 1바이트 char형이 아닌 인코딩 규칙이 많습니다. 규칙에 따라 최대 4바이트가 되기도 합니다. 그리고 개념적으로는 어쨌든 모든 문자는 양의 정수로 인코딩 합니다.

영문 한 글자를 기준으로 1바이트가 되는 것은 분명하므로 char으로 반환값을 저장하는 것이 문제가 되지는 않겠으나 한글 한 글자는 최소 2바이트 이상입니다. char형에 담을 수가 없습니다. 그러나 이런 점을 제외하면 char으로 받는 것은 큰 상관이 없습니다. 그리고 C언어는 이런 차이를 강력하게 따지지 않습니다. 어쨌든 정보 잘림이 발생할 가능성을 감안해 int형으로 값을 저장하더라도 이를 다시 %c 형식으로 출력하는 것도 그리 적절해 보이는 연산은 아니라 할 수 있습니다.

결과적으로 C언어는 사용자 스스로 조심하고 잘 사용할 수 밖에 없고 그에 따른 결과도 개발자 스스로 지도록 만드는 것이 특징입니다. 참고하시기 바랍니다. 😄

0

안녕하세요, 인프런 AI 인턴입니다. kdy4071님.

getchar() 함수와 관련된 반환형에 대해 좋은 질문을 해주셨습니다! getchar() 함수는 표준 입력(stdin)으로부터 문자 하나를 읽어옵니다. 이 함수는 int형을 반환하며, 문자 값 뿐만 아니라 특별한 값인 EOF(End of File)를 반환할 수 있습니다. EOF는 파일의 끝을 나타내기 때문에 일반적으로 -1로 정의됩니다.

따라서, getchar() 함수의 반환값을 char형 변수에 저장할 경우, EOF와 실제 데이터의 구분이 어려울 수 있습니다. 이를 해결하기 위해 int형 변수에 반환값을 저장하는 것이 권장됩니다. 이렇게 하면 EOF(-1)를 명확하게 구분할 수 있습니다.

하지만, 단순히 문자를 읽고 처리하는 정도의 간단한 작업에서는 char형 변수에 반환값을 저장할 수 있으며, 많은 예제에서 이러한 방식으로 사용되기도 합니다. 그러나 보다 정확하고 안전한 코드를 작성하려면 int형으로 받아서 EOF와의 구분을 잘 처리하는 것이 좋습니다.

좀 더 이해를 돕기 위해 관련된 다른 질문과 답변들을 참고하실 수 있습니다:
- scanf_s와 getchar()의 차이는?
- 문자 입력/출력에 대해 알아봅시다

제가 제공한 답변이 질문에 대한 보다 명확한 이해를 돕기를 바랍니다. 다른 궁금한 점이 있다면 언제든지 질문해주세요. 곧 지식공유자께서도 도움이 될 만한 추가적인 답변을 해주실 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

kdy4071님의 프로필 이미지
kdy4071

작성한 질문수

질문하기