작성
·
30
·
수정됨
0
#include <iostream>
#include <ctime>
using namespace std;
struct TM {
int tm_year;
};
int main()
{
time_t timer = time(NULL);
struct tm* t = localtime(&timer);
int yeardb, year = t->tm_year + 1900, age;
char Id[20];
cin >> Id; // 주민번호 입력
// 성별 계산
if (Id[7] == '1' || Id[7] == '2')
{
yeardb = 1900 + ((Id[0]-48) * 10 + (Id[1]-48)); // 특정 문자열의 문자숫자를 숫자로 변환하기 위해서는 '0' 문자0의 아스키 십진수인 48을 뺀다.
}
else
{
yeardb = 2000 + ((Id[0]-48) * 10 + (Id[1]-48));
}
age = year - yeardb + 1;
printf("%d ", age);
if (Id[7] == '1' || Id[7] == '3')
printf("M\n");
else
printf("W\n");
return 0;
}
24년 기준 53세
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
강의에서 다루어진 예제와 유사한 문제 해결에 대한 질문을 주셨네요. 주어진 코드의 주요 기능은 주민등록번호를 통해 나이를 계산하고 성별을 판단하는 것인데요. 코드에서 tm_year를 통해 현재 연도를 얻어와 이를 기반으로 나이를 계산하고 있습니다.
질문하신 내용과 관련된 기존 Q&A에서 참고할 만한 글은 아래와 같습니다:
“age 초기화를 위에서 하면 왜 올바른 값이 나오지않는거죠?”
이 글에서는 연도(year
) 변수를 초기화하는 단계의 중요성에 대해 설명하고 있습니다. 초기에 잘못된 값이 있을 경우, 이후 계산에 문제가 발생할 수 있습니다.
“5번 문제 코드 질문”
런타임 에러 관련하여, 주민등록번호의 특정 자리를 잘못 사용할 경우 어떻게 에러가 발생할 수 있는지를 다루고 있습니다.
“c++ [4.나이차이] 질문드립니다.”
벡터를 사용하여 문제를 해결하는 다른 방법론을 공유하면서 인덱스를 잘 사용하는 법을 다룹니다.
귀하의 코드는 기본적으로 연도 계산과 성별 판단에 문제가 없어 보입니다만, 특정 연도를 기준으로 나이를 계산할 때 반드시 최신화된 연도를 사용하고 있는지, 특히 tm_year
에 의존하여 얻은 것이 정확한 데이터인지 확인해야 합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.