죄송합니다. 글 내리겠습니다.

nietzzche의 이미지

죄송합니다. 글 내리겠습니다.

cats96의 이미지

오류로그를 올려주세요

그리고

#include
#include
#include
#include

인클루드는 비어있었나요?

#include 이건 기본으로 들어가야하고요.. 나머지도 필요한거 들어가야하는데

snowall의 이미지

아래의 입력 형식을 참고하여서 코드 부분을 코드 태그로 감싸주세요

그리고 질문은 질문 게시판이 적절합니다.

피할 수 있을때 즐겨라! http://melotopia.net/b

nietzzche의 이미지

코드 부분을 코드 태그로 감싸라는 것이 무엇인지 이해를 잘 못하겠습니다.(프로그래밍 초보입니다.^^;)
질문은 질문게시판을 이용토록 하겠습니다.(처음이여서 글을 잘못올렸네요.죄송합니다.^^;)

shint의 이미지

실행 되는 검증된 안전한 소스'를 구해서 연습하시는게 좋습니다.
소스를 조금씩 나눠서 직접 만들며. 분석해 보세요.
이 소스는 VS 6.0에서 되기는 했지만. 버그가 많네요.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <ctype.h>
 
struct addr_list
{
        char st_no[10];
        char name[12];
        char id_no[13];
        char addr[30];
        char hp[12];
        char home_ph[12];
        struct addr_list *next;
};
 
struct addr_list *head= NULL;
 
int count()
{
        struct addr_list *cur = head;
        int num=0;
 
        while(1)
        {
                if (cur == NULL)
                {
                        return num;
                }
                else
                {
                        num++;
                        cur = cur -> next;
                }
        }
}
 
void list()
{
        struct addr_list *cur = head;
        printf("the resulrting list is ");
 
        while(1)
        {
                printf("\n학번 : %s\n", cur->st_no);
                printf("이름 : %s\n", cur->name);
                printf("주민번호 : %s\n", cur->id_no);
                printf("주소 : %s\n", cur->addr);
                printf("휴대전화 : %s\n", cur->hp);
                printf("집전화 : %s\n", cur->home_ph);
                printf("----->");
                if (cur->next == NULL)
                {
                        printf("NULL\n");
                        break;
                }
                else
                {
                        cur = cur -> next;
                }
        }
}
 
void create_node()
{
        struct addr_list *list, *pre_list;
 
        while(1)
        {
                list = (struct addr_list*) malloc(sizeof(struct addr_list));
                if (head == NULL)
                {
                        head = list;
                }
                else
                {
                        pre_list->next = list;
                }
 
                printf("\n학번을 입력하시오: , 입력의 끝은 enter를 누르시오!");
                gets(list->st_no);
                if ( *(list->st_no) == '\0' )
                {
                        free (list);
                        pre_list->next = NULL;
                        break;
                }
                printf("이름을 입력하시오:");
                gets(list->name);
                printf("주민번호를 입력하시오:");
                gets(list->id_no);
                printf("주소를 입력하시오:");
                gets(list->addr);
                printf("휴대폰 번호를 입력하시오:");
                gets(list->hp);
                printf("집 전화번호를 입력하시오:");
                gets(list->home_ph);
                list -> next = NULL;
                pre_list = list;
        }
}
 
void update_node()
{
        char st_no[10], yesno, sw='n';
        struct addr_list *cur;
        printf("\n변경할 학번을 입력하시오:");
        gets(st_no);
        if (head == NULL)
        {
                printf("연결리스트가 없음\n");
                exit(0);
        }
        cur = head;
 
        while(cur)
        {
                if (strcmp(cur->st_no, st_no) == 0)
                {
                        printf("\n학번 : %s\n", cur->st_no);
                        printf("이름 : %s\n", cur->name);
                        printf("주민번호 : %s\n", cur->id_no);
                        printf("주소 : %s\n", cur->addr);
                        printf("주소를 변경하십니까? (y/n) : ");
 
                        if ( yesno=getche() == 'y')
                        {
                                printf(" 주소를 입력하시오! :");
                                gets(cur->addr);
                        }
                        printf("휴대전화 : %s\n", cur->hp);
                        printf("휴대전화를 변경하십니까? (y/n) : "); 
                        if ( yesno=getche() == 'y')
                        {
                                printf(" 휴대전화를 입력하시오! :");
                                gets(cur->hp);
                        }
                        printf("집전화 : %s\n", cur->home_ph);
                        printf("집전화를 변경하십니까? (y/n) : "); 
                        if ( yesno=getche() == 'y')
                        {
                                printf(" 집전화를 입력하시오! :");
                                gets(cur->home_ph);
                        }
                        sw='y';
                        break;
                }
                else
                {
                        cur = cur->next;
                }
        }
 
        if (sw == 'n')
        {
                printf ("\n변경할 학번이 없습니다.");
        }
}
 
void insert_node()
{
        struct addr_list *list, *pre_list, *cur;
        list = (struct addr_list *) malloc(sizeof(struct addr_list));
        if (list==NULL)
        {
                printf("memory overflow\n");
                exit(0);
        }
        printf("\n학번을 입력하시오:");
        gets(list->st_no);
        printf("이름을 입력하시오:");
        gets(list->name);
        printf("주민번호를 입력하시오:");
        gets(list->id_no);
        printf("주소를 입력하시오:");
        gets(list->addr);
        printf("휴대폰 번호를 입력하시오:");
        gets(list->hp);
        printf("집 전화번호를 입력하시오:");
        gets(list->home_ph);
        list->next = NULL;
 
        if (head == NULL)
        {
                head = list;
                list->next=NULL;
                printf("0000");
        }
        else
        {
                if (strcmp(head->st_no, list->st_no) >= 0)
                {
                        list ->next = head;
                        head = list;
                }
                else
                {
                        pre_list = head;
 
                        while(1)
                        {
                                cur = pre_list->next;
 
                                if (strcmp(cur->st_no, list->st_no) >= 0 )
                                {
                                        list->next = cur;
                                        pre_list->next = list;
                                        break;
                                }
                                else if (strcmp(cur->st_no, list->st_no) == 0)
                                {
                                        printf("same data duplicated");
                                        exit(0);
                                }
                                else if (cur->next == NULL)
                                {
                                        cur->next = list;
                                        list->next = NULL;
                                        break;
                                }
                                pre_list = cur;
                        }
                }
        }
        printf("************** 학번 %s 삽입되었습니다.\n", list->st_no);
}
 
void remove_node()
{
        struct addr_list *pre_list, *cur;
 
        char st_no[10];
        printf("\n삭제할 학번을 입력하시오:");
        gets(st_no);
        if (head == NULL)
        {
                printf("연결리스트사 없음\n");
                exit(0);
        }
        cur = head;
        if (strcmp(cur->st_no, st_no) == 0)
        {
                head = cur->next;
                printf("************** 학번 %s 삭제되었습니다.\n", st_no);
                free(cur);
        }
        else
        {
                pre_list = cur;
 
                while(1)
                {
                        cur = pre_list->next;
                        if (strcmp(cur->st_no, st_no) == 0)
                        {
                                pre_list->next = cur->next;
                                printf("******** 학번 %s 삭제되었습니다.\n", st_no);
                                free(cur);
                                break;
                        }
 
                        if (cur->next == NULL)
                        {
                                printf("삭제할 학번 %s이 존재하지 않습니다\n", st_no);
                                break;
                        }
                        pre_list = cur;
                }
        }
}
 
int main(int argc, char* argv[])
{
        char s[10];
        while(1)
        {
                printf("\n*******************************************\n");
                printf("생성C, 변경U, 추가I, 삭제D, 출력L, 종료Q : ");
                gets(s);
                *s = toupper(*s);
 
                switch(*s)
                {
                        case 'C' : create_node(); break;
                        case 'U' : update_node(); break;
                        case 'D' : remove_node(); break;
                        case 'I' : insert_node(); break;
                        case 'L' : list();
                        printf("this list has %d element\n", count()); break;
                        case 'Q' : exit(0);
                }
        }
        free (head);
        return 0;
}

----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.

매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.

각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com

nietzzche의 이미지

정말 저에게는 크나큰 도움이 되었습니다. 감사합니다.^^

planetarium의 이미지

업데이트된 질문을 봤는데... 설마 shint 님이 올려준 코드를 일일이 타이핑하신건가요?
오타가 많아졌네요. shint님 코드는 오류가 없습니다.

그리고 에러의 갯수는 중요하지 않습니다. 초보때 실수하는게 에러가 수백개 뜨면 "이걸 어떻게 다 잡아..." 하고 좌절하는건데,
특히 초보때는 에러가 2천개가 나와도 한두군데만 고치면 한꺼번에 해결되는 경우가 많습니다.
맨 위에 나오는 에러부터 차근차근 확인해보세요.