C언어 주민등록번호 입력하면 성별과 나이 출력하기
- 프로그래밍
- 2017. 6. 11.
C언어 주민등록번호 숫자만 입력하면 출력 시 자동으로 하이픈 "-" 추가, 뒷자리 6개는 @로 표현, 나이, 성별을 출력되도록 프로그래밍 해보도록 하겠습니다.
주민등록번호를 숫자로만 입력받아 하이픈을 추가해주고 나이와 성별을 출력해주려면 가장 핵심이 배열과 str 문자 함수입니다.
배열 선언 char strJumin[15]
문자열 복사 함수 strncpy
문자열 추가 함수 strcat
문자열 비교 함수 strncmp
아래에서 더욱 자세하게 코드를 살펴보겠습니다.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main()
{
char strJumin[15]; //입력받을 주민등록번호를 저장하기 위한 배열 15크기로 초기화
char strJumin_out[20] = { 0 }; //주민번호를 비교, @@@@@@치환, 하이픈 -을 출력하기 위한 배열 20크기로 초기화
char strYear[5] = { 0 }; //연도 저장 배열 5크기로 초기화
int strLen = 0; //예외사항 체크를 위한 길이 비교 정수
int i = 0;
int nBirth = 0; //생일을 위한 정수형 변수 0으로 초기화
//주민번호 입력과 예외사항 검증
while (strLen != 13) //strLen의 값이 13이 아닐때까지 반복문
{
printf("주민등록번호를 입력하세요.\n");
scanf("%s", strJumin);
strLen = strlen(strJumin); //scanf로 입력받은 strJumin 배열의 길이를 구해서 strLen에 저장
//길이 체크
if (strLen != 13) //strLen에 저장된 값이 13이 아니면 아래 실행
{
printf("주민등록번호는 13자리여야 합니다.\n");
continue; //입력부터 다시 시작해야하므로
}
//숫자, 문자 체크
for (i = 0; i < strLen; i++) //초기문 i = 0 , 조건문 i가 strLen보다 작을때까지, 증감문 i를 후연산으로 + 시킴 (1씩 증가)
{
if (strJumin[i] < 48 || strJumin[i] > 57) //문자열이므로 아스키코드 적용 (아스키코드 48~57이 숫자로 0~9임)
{
printf("주민등록번호는 숫자만 입력 가능합니다..\n");
strLen = 0; //다시 입력해야하므로 strLen 초기화
continue; //입력부터 다시 시작해야하므로
}
}
}
// 주민등록번호 "-" 포함 문자열 만들기
strncpy(strJumin_out, strJumin, 6); //strJumin의 내용을 strJumin_out에 6자리만큼 복사
strcat(strJumin_out, "-"); //strJumin_out과 하이픈을 합침
if (!strncmp(&strJumin[6], "1", 1)) strcat(strJumin_out, "1"); //strncpm 문자 비교 함수로 strJumin[6]의 첫 번째 주소값이 1이면 1을 합쳐서 출력, 2면 2를 합쳐서 출력
else strcat(strJumin_out, "2");
strcat(strJumin_out, "@@@@@@"); //뒷자리 6자리는 @로 출력해야되기 때문에 strcat함수로 붙임
printf("주민등록번호 : %s \n", strJumin_out); //완성된 주민등록번호 출력
// 나이
strncpy(strYear, strJumin, 2); //strYear의 내용을 strJumin에 2자리 만큼 복사
nBirth = atoi(strYear); //배열에 문자로 되어있는 strYear의 저장값을 정수로 변환하여 nBirth변수에 저장
printf("나이 : %d \n", 2017 - nBirth - 1900); //2017년 기준
// 성별
printf("성별 : ");
if (!strncmp(&strJumin[6], "1", 1)) printf("남\n"); //strncpm 문자 비교 함수로 strJumin[6]의 첫 번째 주소값이 1이면 남자로 출력, 그외는 여자로 출력
else printf("여\n");
}
주석에 자세한 설명을 적어놨습니다. 혹시라도 모르시는게 있으시다면 함수 별로 검색을 해보시기 바랍니다. 프로그래밍에 있어서 구글 검색으로 배우는 것은 상당히 많은 도움이 됩니다. 거의 교과서라고도 부르고 있죠ㅎㅎ