C언어 주민등록번호 입력하면 성별과 나이 출력하기

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");

 

}


 

주석에 자세한 설명을 적어놨습니다. 혹시라도 모르시는게 있으시다면 함수 별로 검색을 해보시기 바랍니다. 프로그래밍에 있어서 구글 검색으로 배우는 것은 상당히 많은 도움이 됩니다. 거의 교과서라고도 부르고 있죠ㅎㅎ

 

반응형

댓글

Designed by JB FACTORY