편집 기록

편집 기록
  • 프로필 nowp님의 편집
    날짜2021.12.12

    c언어 strcpy 문제 질문


    자꾸 strcpy(date) 이부분에서 오류가 뜬다고 나오는데 아무리 머리를 쥐어짜도 모르겠네요 ㅠㅠ 그리고 오류가 있어도 실행은 되는데 6번 일정입력기능을 들어가서 입력하면 계속진행되는게 아니라 프로그램이 종료되네요 이거 어떻게 해결해야 할까요 ??이미지

    #include <stdio.h>
    #include <string.h>
    #define Title_LEN   20
    #define Memo_LEN    20
    #define MAX_DATA_NUM    100
    #define Date_LEN    50
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    struct member{ //회원정보
        char id; //학번
        char name[10]; //이름
        int contact; //연락처
        char address[100]; //주소
    }typedef member;
    
    struct scheduel { //동아리 일정
        int date[Date_LEN]; //날짜
        char title[Title_LEN]; //제목
        char memo[Date_LEN]; //메모
    }typedef scheduel;
    
    struct bookborrow{ //도서 대여정보
        int id[10]; //회원 번호
        int ISBN; //ISBN
        int borrow[100]; //대여날짜
        int return_[100]; //반납날짜
    }typedef borrowreturn;
    
    
    
    
    
    int compare(char *str1, char *str2); //비교함수
    int num_total_book=0; //현재 책의 수
    int num_borrowtotal_book=0; //현재 빌린 책의 수
    int num_total_member=0; //현재 회원 수
    
    int main(void)  {
        member mk[10] = {0}; //저장 크기
    
        borrowreturn bw[10] = {0};
    
        int index = 0; //주소값 지정
        int select; //동작 입력
        int del_index; //삭제, 수정용 주소값
        int i; //for문 반복 횟수용
        scheduel * parr; 
        int * pnum;
        /*사용자 메뉴 화면 출력(UI)*/
    
        while(1) {
        system("chs"); //콘솔창 지우기
        printf("\n-----------------------------\n");
        printf("   도서관 정보 시스템\n");
        printf("-----------------------------\n");
        printf(" ['1'] 새로운 회원 정보(회원번호, 이름, 연락처, 주소) 입력\n");
        printf(" ['2'] 기존 회원 정보 삭제\n");
        printf(" ['3'] 기존 회원 정보 수정\n");
        printf(" ['4'] 기존 회원 리스트 출력\n");
        printf(" ['5'] 회원 목록 중 이름 또는 연락처로 검색\n");
        printf("-----------------------------\n");
        printf(" ['6'] 일정입력\n");
        printf(" ['7'] 일정삭제\n");
        printf(" ['8'] 일정정 출력\n");
        printf(" ['9'] 일정 저장\n");
        printf(" ['10'] 일정\n");
        printf("-----------------------------\n");
        printf(" ['11'] 도서 대여정보(ISBN,회원번호, 대여날짜, 반납날짜) 입력\n");
        printf(" ['12'] 기존 대여 정보 수정\n");
        printf(" ['13'] 주어진 날짜(년 월 일)에 대여 중이거나 중이었던 도서리스트 출력\n");
        printf("-----------------------------\n");
        printf(" ['-1'] 프로그램 종료\n");
        printf("-----------------------------\n");
        printf("\n\n 원하시는 서비스를 선택하세요.");
        scanf("%d",&select);
    
                if(select == 5) { // [5] 회원 목록 중 이름 또는 연락처로 검색
                    system("cls");
                    printf("\n");
                    int num_total_member;
                    int user_m_input; // 사용자의 입력받기
                    char user_m_search[30];
    
    
                    printf("어느 것으로 검색 할 것인가요? \n");
                    printf("1. 이름 검색 \n");
                    printf("2. 연락처 검색 \n");
                    scanf("%d", &user_m_input);
                    printf("검색할 단어를 입력해주세요 : ");
                    scanf("%s", &user_m_search);
    
                    printf("검색 결과 \n"); 
                    if (user_m_input == 1) { //이름과 검색어 비교
                        for (i = 0; i < num_total_member; i++) {
                            if (compare(mk[i].name, user_m_search)) {
                                printf("번호 : %d // 회원번호 : %d // 이름 : %s // 연락처 : %d // 주소 : %s \n", i,mk[i].id, mk[i].name,mk[i].contact, mk[i].address);
                                }
                            }
                    }
                    else if (user_m_input == 2) { //연락처와 검색어 비교
                        for (i = 0; i < num_total_member; i++) {
                            if (compare(mk[i].contact, user_m_search)) {
                                  printf("번호 : %d // 회원번호 : %d // 이름 : %s // 연락처 : %d // 주소 : %s \n", i,mk[i].id, mk[i].name,mk[i].contact, mk[i].address);
                                    }
                                }
                            }
                    return 0;
                }
                else if(select == 6) { //[6]일정 입력
                    system("cls"); //콘솔창 지우기
    
            int date[Date_LEN];
            char title[Title_LEN], memo[Memo_LEN];
    
            printf("[ INSERT ] \n");
            printf("일정입력 : "); scanf("%d", date);
            printf("제목입력: "); scanf("%s", title);
            printf("내용입력 : "); scanf("%s", memo);
    
           strcpy(parr[*pnum].date, date);//날짜데이터에 날짜저장
           strcpy(parr[*pnum].title, title);//제목데이터에 제목저장
           strcpy(parr[*pnum].memo, memo);//내용데이터에 내용저장
            (*pnum)++;//데이터 갯수 증가
    
        printf("--------> 입력완료!.....\n");
                   }
    
                else if(select == 7){ //[7]일정 삭제
                    system("cls");
                    printf("\n");
                    int i, j;
        char title[Title_LEN];//제목
    
    
        printf("[ Remove ] \n");
        printf("Input Name for Removing : "); scanf("%s", title);
    
        for(i=0; i < *pnum; i++)
        {
            if(strcmp(parr[i].title, title)==0)
            {
                    for(j=i+1; j < *pnum; j++)
                {
                    strcpy(parr[j-1].date, parr[j].date);
                    strcpy(parr[j-1].title, parr[j].title);
                    strcpy(parr[j-1].memo, parr[j].memo);
                }
                (*pnum)--;
                return 0;
            }
        }
                printf("-------> Data Not Found......\n");
    
                }
                else if(select == 8) { //[8] 일정출력
                    system("cls");
                    printf("\n");
                        int i, num;
        printf("[ Print All Data ] \n");
    
        for(i=0; i<num; i++)
            printf("날짜 : %d / 제목 : %s /  내용 : %s\n", parr[i].date, parr[i].title,parr[i].memo);
    
                    }
                else if(select == 9) { //[9] 일정
                    system("cls");
                    printf("\n");
                        FILE * file = fopen("a.txt", "rt");
        if(file==NULL)
        {   
            return 0;   
        }
    
        while(1)
        {
            fscanf(file, "%d %s %s", parr[*pnum].date, parr[*pnum].title,parr[*pnum].memo);
            if(feof(file)!=0)
                break;
            (*pnum)++;
        }
                }
                else if(select == 10) { //[10] 일정 저장
                    system("cls");
                    printf("\n");
                    int i,num;
    
        FILE * file = fopen("a.txt", "wt");
        if(file==NULL)
        {
            printf("file open error!\n");
            return 0;
        }
        for(i=0; i<num; i++)
            fprintf(file, "%d %s %s ", parr[i].date, parr[i].title, parr[i].memo);
             } 
    
    }     
    return 0; 
    }
    int compare(char *str1, char *str2) { /*문자열 비교 함수*/
      while (*str1) {
        if (*str1 != *str2) { //str과 str2가 같을 경우 실행, 아닐 경우 지나감
          return 0;
        }
        str1++;
        str2++;
      }
      if (*str2 == '\0') //NULL 삽입
        return 1;
      return 0;
    }
    
  • 프로필 알 수 없는 사용자님의 편집
    날짜2021.12.11

    c언어 strcpy 문제 질문


    자꾸 strcpy(date) 이부분에서 오류가 뜬다고 나오는데 아무리 머리를 쥐어짜도 모르겠네요 ㅠㅠ 그리고 오류가 있어도 실행은 되는데 6번 일정입력기능을 들어가서 입력하면 계속진행되는게 아니라 프로그램이 종료되네요 이거 어떻게 해결해야 할까요 ??이미지

    include

    include

    define Title_LEN 20

    define Memo_LEN 20

    define MAX_DATA_NUM 100

    define Date_LEN 50

    struct member{ //회원정보 char id; //학번 char name[10]; //이름 int contact; //연락처 char address[100]; //주소 }typedef member;

    struct scheduel { //동아리 일정 int date[Date_LEN]; //날짜 char title[Title_LEN]; //제목 char memo[Date_LEN]; //메모 }typedef scheduel;

    struct bookborrow{ //도서 대여정보 int id[10]; //회원 번호 int ISBN; //ISBN int borrow[100]; //대여날짜 int return_[100]; //반납날짜 }typedef borrowreturn;

    int compare(char *str1, char *str2); //비교함수 int num_total_book=0; //현재 책의 수 int num_borrowtotal_book=0; //현재 빌린 책의 수 int num_total_member=0; //현재 회원 수

    int main(void) { member mk[10] = {0}; //저장 크기

    borrowreturn bw[10] = {0};
    
    int index = 0; //주소값 지정
    int select; //동작 입력
    int del_index; //삭제, 수정용 주소값
    int i; //for문 반복 횟수용
    scheduel * parr; 
    int * pnum;
    /*사용자 메뉴 화면 출력(UI)*/
    
    while(1) {
    system("chs"); //콘솔창 지우기
    printf("\n-----------------------------\n");
    printf("   도서관 정보 시스템\n");
    printf("-----------------------------\n");
    printf(" ['1'] 새로운 회원 정보(회원번호, 이름, 연락처, 주소) 입력\n");
    printf(" ['2'] 기존 회원 정보 삭제\n");
    printf(" ['3'] 기존 회원 정보 수정\n");
    printf(" ['4'] 기존 회원 리스트 출력\n");
    printf(" ['5'] 회원 목록 중 이름 또는 연락처로 검색\n");
    printf("-----------------------------\n");
    printf(" ['6'] 일정입력\n");
    printf(" ['7'] 일정삭제\n");
    printf(" ['8'] 일정정 출력\n");
    printf(" ['9'] 일정 저장\n");
    printf(" ['10'] 일정\n");
    printf("-----------------------------\n");
    printf(" ['11'] 도서 대여정보(ISBN,회원번호, 대여날짜, 반납날짜) 입력\n");
    printf(" ['12'] 기존 대여 정보 수정\n");
    printf(" ['13'] 주어진 날짜(년 월 일)에 대여 중이거나 중이었던 도서리스트 출력\n");
    printf("-----------------------------\n");
    printf(" ['-1'] 프로그램 종료\n");
    printf("-----------------------------\n");
    printf("\n\n 원하시는 서비스를 선택하세요.");
    scanf("%d",&select);
    
            if(select == 5) { // [5] 회원 목록 중 이름 또는 연락처로 검색
                system("cls");
                printf("\n");
                int num_total_member;
                int user_m_input; // 사용자의 입력받기
                char user_m_search[30];
    
    
                printf("어느 것으로 검색 할 것인가요? \n");
                printf("1. 이름 검색 \n");
                printf("2. 연락처 검색 \n");
                scanf("%d", &user_m_input);
                printf("검색할 단어를 입력해주세요 : ");
                scanf("%s", &user_m_search);
    
                printf("검색 결과 \n"); 
                if (user_m_input == 1) { //이름과 검색어 비교
                    for (i = 0; i < num_total_member; i++) {
                        if (compare(mk[i].name, user_m_search)) {
                            printf("번호 : %d // 회원번호 : %d // 이름 : %s // 연락처 : %d // 주소 : %s \n", i,mk[i].id, mk[i].name,mk[i].contact, mk[i].address);
                            }
                        }
                }
                else if (user_m_input == 2) { //연락처와 검색어 비교
                    for (i = 0; i < num_total_member; i++) {
                        if (compare(mk[i].contact, user_m_search)) {
                              printf("번호 : %d // 회원번호 : %d // 이름 : %s // 연락처 : %d // 주소 : %s \n", i,mk[i].id, mk[i].name,mk[i].contact, mk[i].address);
                                }
                            }
                        }
                return 0;
            }
            else if(select == 6) { //[6]일정 입력
                system("cls"); //콘솔창 지우기
    
        int date[Date_LEN];
        char title[Title_LEN], memo[Memo_LEN];
    
        printf("[ INSERT ] \n");
        printf("일정입력 : "); scanf("%d", date);
        printf("제목입력: "); scanf("%s", title);
        printf("내용입력 : "); scanf("%s", memo);
    
       strcpy(parr[*pnum].date, date);//날짜데이터에 날짜저장
       strcpy(parr[*pnum].title, title);//제목데이터에 제목저장
       strcpy(parr[*pnum].memo, memo);//내용데이터에 내용저장
        (*pnum)++;//데이터 갯수 증가
    
    printf("--------> 입력완료!.....\n");
               }
    
            else if(select == 7){ //[7]일정 삭제
                system("cls");
                printf("\n");
                int i, j;
    char title[Title_LEN];//제목
    
    
    printf("[ Remove ] \n");
    printf("Input Name for Removing : "); scanf("%s", title);
    
    for(i=0; i < *pnum; i++)
    {
        if(strcmp(parr[i].title, title)==0)
        {
                for(j=i+1; j < *pnum; j++)
            {
                strcpy(parr[j-1].date, parr[j].date);
                strcpy(parr[j-1].title, parr[j].title);
                strcpy(parr[j-1].memo, parr[j].memo);
            }
            (*pnum)--;
            return 0;
        }
    }
            printf("-------> Data Not Found......\n");
    
            }
            else if(select == 8) { //[8] 일정출력
                system("cls");
                printf("\n");
                    int i, num;
    printf("[ Print All Data ] \n");
    
    for(i=0; i<num; i++)
        printf("날짜 : %d / 제목 : %s /  내용 : %s\n", parr[i].date, parr[i].title,parr[i].memo);
    
                }
            else if(select == 9) { //[9] 일정
                system("cls");
                printf("\n");
                    FILE * file = fopen("a.txt", "rt");
    if(file==NULL)
    {   
        return 0;   
    }
    
    while(1)
    {
        fscanf(file, "%d %s %s", parr[*pnum].date, parr[*pnum].title,parr[*pnum].memo);
        if(feof(file)!=0)
            break;
        (*pnum)++;
    }
            }
            else if(select == 10) { //[10] 일정 저장
                system("cls");
                printf("\n");
                int i,num;
    
    FILE * file = fopen("a.txt", "wt");
    if(file==NULL)
    {
        printf("file open error!\n");
        return 0;
    }
    for(i=0; i<num; i++)
        fprintf(file, "%d %s %s ", parr[i].date, parr[i].title, parr[i].memo);
         } 
    

    }
    return 0; } int compare(char str1, char *str2) { /문자열 비교 함수*/ while (*str1) { if (*str1 != *str2) { //str과 str2가 같을 경우 실행, 아닐 경우 지나감 return 0; } str1++; str2++; } if (*str2 == '\0') //NULL 삽입 return 1; return 0; }