#include
#include
void PrintMenu();//메뉴
void InsertDB();//등록
void SearchDB();//검색
void PrintDB();//출력
void DeleteDB();//종료
int find(char n[]);//문자열 검색 함수
int in;
#define DB_SIZE 100
#define NAME_LEN 20
#define TEL_LEN 20
#define ADDR_LEN 30
char name[DB_SIZE][NAME_LEN];
char phone[DB_SIZE][TEL_LEN];
char address[DB_SIZE][ADDR_LEN];
int main()
{
        PrintMenu();//메뉴
        return 0;
}
void PrintMenu()
{
        int n;
        while (1)//무한반복
        {
                printf("---------Menu--------\n");
                printf(" 1. 등록 \n");
                printf(" 2. 삭제 \n");
                printf(" 3. 검색 \n");
                printf(" 4. 출력 \n");
                printf(" 5. 종료 \n");
                printf("---------------------\n");
                printf("Choose the item : ");
                scanf("%d", &n);
                printf("\n");
                getchar();
                if (1 <= n && n <= 5)
                {
                        switch (n)
                        {
                        case 1:
                                InsertDB();//등록
                                break;
                        case 2:
                                DeleteDB();//삭제
                                break;
                        case 3:
                                SearchDB();//검색
                                break;
                        case 4:
                                PrintDB();//출력
                                break;
                        case 5:
                                return;//종료
                                break;
                        }
                }
                else
                {
                        getchar();
                        printf("다시 입력하세요[1-5]\n");
                }
        }
}
void InsertDB()
{
        char n[DB_SIZE][NAME_LEN], p[DB_SIZE][TEL_LEN], a[DB_SIZE][ADDR_LEN];
        printf("[ INSERT ]\n");
        in++;
        printf("Input Name : ");
        gets(n);
        strcpy(name[in], n);//입력된 이름을 저장
        printf("Input Tel Number : ");
        gets(p);
        strcpy(phone[in], p);//입력된 전화번호를 저
        printf("Input Address : ");
        gets(a);
        strcpy(address[in], a);//입력된 주소를 저장
        printf("--------> Data inserted......\n\n");

}

void DeleteDB()
{
        char n[DB_SIZE][NAME_LEN], r;
        int i;
        printf("[ Remove ]\n");
        printf("Input Name for Removing : ");
        scanf("%s", n);
        r = find(n);
        if (-1 == r)
        {
                printf("No Data Found\n\n");
                return;
        }
        for (i = r; i < in - 1; i++)
        {
                strcpy(name[i], name[i + 1]);
                strcpy(phone[i], phone[i + 1]);
                strcpy(address[i], address[i + 1]);
        }
        
        in--;
        printf("-------> Complete deleting the phone data......\n\n");
}

void SearchDB()
{
        int i;
        char n[DB_SIZE][NAME_LEN];

         if (in > 0){
          printf("Input Name: ");
          scanf("%s", n);

         for (i = 0; i <= in; i++){
            
               if (!strcmp(name[i], n)){

                   printf("---> Name : %-20s / Tel : %-20s / Address : %s \n", name[i], phone[i], address[i]);
                    return;
               }
          }
          printf("No Data Found \n\n");
          return 0;
     }
     else{
          printf("No Data Found \n\n");
          return 0;
     }

}

int find(char n[])
{
        int f;
        for (f = 1; f <= DB_SIZE; f++)
        {
                if (!strcmp(name[f], n))
                {
                        return f;

                } 
        }
        return -1;
}

void PrintDB()
{
        int i;
        printf("[ Print All Data ]\n");
        if (in == 0)
        {
                printf("No Data Inserted.\n\n");
                return;
        }
        for (i = 1; i <= in; i++)
        {
                printf("Name : %-20s / Tel : %-20s / Address : %s \n", name[i], phone[i], address[i]);
        }
        printf ("\n");
}

DeleteDB함수보면
{
                strcpy(name[i], name[i + 1]);
                strcpy(phone[i], phone[i + 1]);
                strcpy(address[i], address[i + 1]);
        }
이부분밑에

strcpy(name[i], "");
strcpy(phone[i], "");
strcpy(address[i],"");
추가하니까 되는데
배열i자리에 있던걸 이미i+1로 옮겼으면 i부분을 NULL로 만들필요 없는거 아니야?
된건 좋은데 왜 되는지 아는게 더 중요할거같다