728x90
-목차-
1. 문제 설명
2. 문제 이해 및 풀이 과정
1. 문제 설명
2. 문제 이해
(1) 외부 변수를 통해 여러 개의 c파일에 정리한다고 하더라도 이 프로그램은 엄청난 규모의 프로그램이 아니므로 main.c에서 함수로서 전부 선언해준다음 외부 c파일에 함수들을 옮겨담도록 하자.
(2) main.c (큰 틀)
#include <stdio.h>
#include <string.h>
#include "register.h"
#include "allprint.h"
#include "personalprint.h"
struct person_lst {
char p_name[20];
char p_num[20];
};
struct person_lst p[100]; // 사람 정보 100개 정도 저장 가능
int num; // 가짓수 1,2,3,4 중 택 가능
int i = 0; // 전하번호 목록 어디까지 저장했는지 나타냄
int main(void) {
printf("전화번호 관리\n\n");
while(1) {
if (num == 4) {
printf("프로그램을 종료합니다.\n");
break;
}
printf("1. 등록 [Tab] 2. 전체검색 [Tab] 3. 특정인검색 [Tab] 4. 종료\n\n");
printf("메뉴 선택: ");
scanf("%d",&num);
if (num == 3) {
printf("\n");
personalprint();
} else if (num == 2) {
printf("\n");
allprint();
} else if (num == 1) {
my_register();
}
}
return 0;
}
~
+) 구조체 배열을 통해 외부 변수로 배열을 전달하자!! (구조체 배열의 용이성)
(3) register.c
struct person_lst { // 마찬가지로 구조체 배열을 선언해줘야함.
char p_name[20];
char p_num[20];
};
extern struct person_lst p[100]; // extern을 통해 외부 변수를 선언해주자.
extern int num;
extern int i;
void my_register() {
// 비번 입력 받고 확인
printf("비밀번호: ");
char password[20];
scanf("%s",password);
char real_pwd[20] = "qwer1234";
int ret = strcmp(password,real_pwd);
static int wrong_number = 0;
if (!ret) { // ret가 0이라면 비밀번호를 qwer1234로 맞게 입력한 거임
wrong_number = 0;
i += 1;
printf("등록할 이름: ");
char name[20];
scanf("%s",p[i].p_name);
printf("전화번호: ");
char p_num[20];
scanf("%s",p[i].p_num);
printf("홍길동 정보 등록 완료!\n\n");
} else {
wrong_number += 1;
if (wrong_number == 3) {
printf("비밀번호(3회실패): 등록할 수 없음!\n\n");
num = 4;
} else {
printf("비밀번호(%d번실패): %s",wrong_number,password);
printf("\n");
my_register();
}
}
}
+) register.h
register 함수 선언함.
#ifdef _register_h_
#define _register_h_
register();
#endif
(4) allprint.c
struct person_lst {
char p_name[20];
char p_num[20];
};
extern struct person_lst p[100];
extern int num;
extern int i;
void allprint() {
printf("<< 전화번호목록 >> \n");
for (int j = 0; j <= i; j++) {
printf("%s %s\n",p[j].p_name, p[j].p_num);
}
printf("\n");
}
+) allprint.h
#ifdef _allprint_h_
#define _allprint_h_
allprint();
#endif
(5) personalprint.c
struct person_lst {
char p_name[20];
char p_num[20];
};
extern struct person_lst p[100];
extern int num;
extern int i;
void personalprint() {
char name[20];
printf("검색할 이름: ");
scanf("%s",name);
for (int j = 0; j <= i; j++) { // 구조체 배열을 찾아보며 찾고자 하는 사람 찾기
int ret = strcmp(name,p[j].p_name);
if (!ret) {
printf("%s %s\n",p[j].p_name,p[j].p_num);
}
}
}
+) personalprint.h
#ifdef _personalprint_h_
#define _personalprint_h_
personalprint();
#endif
(6) Makefile
main: main.o register.o allprint.o personalprint.o
gcc -o main main.o register.o allprint.o personalprint.o
register.o: register.c
gcc -c register.c
allprint.o: allprint.c
gcc -c allprint.c
personalprint.o: personalprint.c
gcc -c personalprint.c
main.o: main.c
gcc -c main.c
clean:
rm main main.o allprint.o personalprint.o register.o
- 물론 확장자를 통해 더 간단히 표현 가능하다...
- make를 통해 실행파일을 만든 뒤 ./main를 통해 프로그램을 실행시키자.
'개인 프로젝트 > 잡다한 것들' 카테고리의 다른 글
[C/C++] 대칭절 - ! 특별한 날 - ! (0) | 2022.01.18 |
---|---|
[파이썬 웹스크래핑] 파이썬으로 코로나 웹사이트 정보 정리하기 (0) | 2021.08.23 |
[파이썬 유튜브 다운로드] 파이썬으로 유튜브 영상 다운로드하기 (0) | 2021.08.20 |
[파이썬 웹크롤링] 1to50 매크로 만들기 (0) | 2021.08.20 |