수다닷컴

  • 해외여행
    • 괌
    • 태국
    • 유럽
    • 일본
    • 필리핀
    • 미국
    • 중국
    • 기타여행
    • 싱가폴
  • 건강
    • 다이어트
    • 당뇨
    • 헬스
    • 건강음식
    • 건강기타
  • 컴퓨터
    • 프로그램 개발일반
    • C언어
    • 비주얼베이직
  • 결혼생활
    • 출산/육아
    • 결혼준비
    • 엄마이야기방
  • 일상생활
    • 면접
    • 취업
    • 진로선택
  • 교육
    • 교육일반
    • 아이교육
    • 토익
    • 해외연수
    • 영어
  • 취미생활
    • 음악
    • 자전거
    • 수영
    • 바이크
    • 축구
  • 기타
    • 강아지
    • 제주도여행
    • 국내여행
    • 기타일상
    • 애플
    • 휴대폰관련
  • 프로그램 개발일반
  • C언어
  • 비주얼베이직

고수님들!!!!도와주세요..ㅠ링크드 리스트 프로그램입니다. 삭제, 검색, 직접입력 메뉴에서 오류가 계속 납니다.ㅠ

혜린

2023.04.01

링크드 리스트 프로그램입니다. 삭제, 검색, 직접입력 메뉴에서 오류가 계속 납니다.ㅠ삭제, 검색, 직접입력 메뉴 함수가 말을 듣지 않습니다.ㅠ질문 내용 :
일단 이 프로그램은 c언어 파일과 같은 폴더에 존재하는 파일(첨부하는 data.txt)로부터 입력을 받은 후에
진행되는 프로그램입니다. 우선시작한 후 메뉴 1에서 파일을 읽어들이셔야 합니다.
이제부터 질문을 드리겠습니다.

1.파일을 읽어들이기 전에다른 메뉴들을 누르면 리스트가 비어져 있어 메뉴가 실행이 안된다는 내용이 출력이되야하는데
무조건 오류 종료가 됩니다. (메뉴 2번만 정상 작동됩니다.)

2. 삭제, 검색 함수는 제가 짜보긴했습니다만정상적으로 작동하지 않습니다. 삭제는 정상 작동하는 듯이 보이나 출력(메뉴 5)하면 삭제되지 않게 나옵니다.ㅠㅠ제가 좀더 헷갈리는 부분은 빨간색으로 표시해두었습니다.
(void word_del() 함수)
(void word_search() 함수)

3. 직접입력 메뉴는 입력한 단어가 링크드 리스트 마지막에 되어야 하는데 문제가 있는데 출력(메뉴 5)을 하면 오류가 납니다..
(void word_input() 함수)

4. 원래 메뉴 중 7번을 누르면 정상적으로 종료가 됐었는데 지금은 되지 않습니다.ㅠㅠ

문제가 있는 함수는 파란색으로 표시해두었으며 특히 헷갈리는 부분은 빨간색으로 표시해두겠습니다.

고수님들~~ 정말 부탁 드리겠습니다.ㅠㅠ
어떤 문제가 있는것인지 가르쳐 주시면 감사하겠습니다..#include stdio.h
#include string.h
#include stdlib.h
/*-------------------------struct declaration & creation-----------------------*/
struct list
{
char word[20];
struct list *next;
};

/*---------------------------global variables----------------------------------*/
struct list *head;
file *fp;
char filename[20];

/*---------------------------function prototypes-------------------------------*/
void input_file();
void word_input();
void word_del();
void word_search();
void word_sort();
void show();
/*******************************************************************************
* *
* main program&; *
* *
*******************************************************************************/
int main()
{

int num;
printf(***********************************************************************);
printf(\n*\t\t\tword sort program\t\t\t *\n);
printf(*\t\t\t=================\t\t\t *\n);
printf(* description : 이 프로그램은 wordlist.c 파일과 같은 폴더에 있는 *\n);
printf(* txt 파일(단어들이 적혀있는 파일)을 프로그램 상으로 *\n);
printf(* 불러들여 색인순으로 검색, 삭제, 정렬, 출력 등의 *\n);
printf(* 역할을 하는 사전프로그램입니다. *\n);
printf(***********************************************************************\n);
system(pause);
system (cls);
while(1){
printf(************************************************************************\n);
printf(* 메 뉴 *\n);
printf(* *\n);
printf(* 1. 파일입력 2.직접입력 *\n);
printf(* 3. 검색 4.삭제 *\n);
printf(* 5. 출력 6.정렬 *\n);
printf(* 7. 종료 *\n);
printf(* *\n);
printf(************************************************************************\n);
printf(\n메뉴를 선택하세요 : );
scanf(%d, &num);

if(num == 7) break;
switch(num) {
case 1:
input_file();
break;
case 2:
word_input();
break;
case 3:
word_search();
break;
case 4:
word_del();
break;
case 5:
show();
break;
case 6:
word_sort();
break;
default:
printf(잘 못 선택하셨습니다.\n);
}
system(pause);
system (cls);
}

fclose(fp);
return 0;
}
/*******************************************************************************
* function input_file() : 입력하는 파일내에 존재하는 단어를 *
* linked list로 이동시키는함수 *
*******************************************************************************/
void input_file(){
while(1) //무한반복
{
printf(\n\t불러들일 파일명을 입력하세요(예: *.txt) : ); //파일명을 입력받아 문구 출력
scanf(%s,filename); //입력받은 문자열을 filename에 저장
printf(\n);
fp=fopen(filename,r); //파일을 읽기전용으로 연다
if(fp==null) //열린 파일이 없으면
printf(해당 파일이 없습니다.\n); //에러문구 출력하고 다시 반복
else{ //아니면
printf(파일을 읽었습니다.\n);
break; //무한반복 탈출
}
}
head=(struct list *)malloc(sizeof(struct list));
head-next=null; //머리 초기화
while(1)
{
struct list *data=(struct list *)malloc(sizeof(struct list)); //추가할 객체 메모리 동적 할당
struct list *roof=head; //조작할 변수
if(fscanf(fp,%s,data-word)==eof)break;//파일에서 읽어옴
data-next = null;//마지막 객체를 알림
while(roof-next != null)
roof=roof-next;//마지막 객체로 이동
roof-next=data;//데이타 추가
}
}
/*******************************************************************************
* function word_input() : 입력하는 단어를 linked list에 추가하는 *
* 함수 sp; *
*******************************************************************************/
void word_input()
{
char i[100]; //입력받을 단어
struct list *temp; // 마지막 노드에 삽일 할 시 사용할 구조체
struct list *new_node; // 삽일 할 시 사용할 구조체
new_node=(struct list *)malloc(sizeof(struct list)); //새로운 노드 동적할당
if(head == null){ //리스트에 자료가 없을 경우 리턴할 if문
printf(우선 파일을 읽어야 합니다.(메뉴1)\n);
return;
}

else{ //리스트 마지막 노드에 삽일
printf(삽입할 단어를 입력하세요.);
scanf(%s, &i);
new_node-next = i; // 새로운 노드 다음 링크에 i를 삽입
new_node-next-next=null; //새로운 노드 다음다음에 자료값은 null
temp=head-next; // temp는 메뉴 1번으로 읽어들인 자료 head의 다음 링크
if(temp==null) //temp가 null일 경우 바로 다음 노드에 새로운 노드 삽입
{
head-next=new_node;
printf(단어를 삽입했습니다.);
return;
}
else //temp가 null이 아닐 경우 마지막 노드에 새로운 노드 삽입
{
while(temp-next!=null)
temp=temp-next;
temp-next=new_node-next;
return;
}
}
}

/*******************************************************************************
* function word_del() : 입력하는 단어를 linked list에서 삭제하는 *
* 함수 *
*******************************************************************************/
void word_del()
{
char i[100]; //삭제할 단어
struct list *temp, *temp2; // temp는 메뉴 1에서 읽어들인 파일의 자료 head의 다음 링크, temp2는 삭제할 단어를 찾기위한 구조체
temp=head-next;
printf(삭제할 단어를 입력하세요 : );
scanf(%s, &i);
system(cls);

if(head==null){ //리스트가 null일 경우 메뉴로 리턴
printf(리스트에 단어가 존재하지 않습니다.);
return;
}
else if(temp==i) //리스트 첫 노드에 단어가 존재할 경우 삭제할 else if문
{
printf(단어 %s를 삭제하였습니다., i);
printf(리스트 내에 단어가 존재하지 않습니다.);
free(temp);
return ;
}
else//리스트 중간 및 마지막 노드에 단어가 존재할 경우 삭제할 else if문
{
while(temp!=null)
{
temp2=temp-next;
if(temp2==i)
{
temp=temp2-next;
free(temp);
printf(단어 %s를 삭제하였습니다., i);
return ;
}
else
temp=temp-next;
}
}
}

/*******************************************************************************
* function word_search() : 입력하는 단어가 linked list에 존재하는지 *
* 알려주는 함수 *
*******************************************************************************/
void word_search()
{
char data[100]; //검색할 단어
struct list *temp; //검색할 시 필요한 구조체
temp=head-next;
if(head==null){
printf(리스트에 단어가 존재하지 않습니다.);
return;
}
else{
printf(단어를 입력하세요.);
scanf(%s, &data);

while(temp !=null) //null이 아닐 때까지 temp값을 돌림
{
if(temp==data) //temp가 검색할 단어를 찾을 경우 출력하고 메뉴로 리턴
{
printf(단어가 존재합니다.);
return ;
}
else //못찾으면 계속 돌림
temp=temp-next;
}
printf(단어가 존재하지 않습니다.);
return ;
}
}

/*******************************************************************************
* function word_sort() : linked list에 읽혀진 단어들을 색인 순서대로 *
* 정렬하는 함수 *
* (정렬 순서 : 숫자 - 영어 - 한글) *
*******************************************************************************/
void word_sort()//이름으로 정렬합니다.
{
struct list *roof1=head-next;
struct list *roof2;
char str[20];
printf(정렬이 완료 되었습니다.\n);
while(roof1-next != null)//버블 소트
{
roof2=roof1-next;
while(roof2 != null)&n
{
if(stricmp(roof1-word,roof2-word) 0)
{
strcpy(str,roof1-word);//데이타 교환
strcpy(roof1-word,roof2-word);
strcpy(roof2-word,str);
}
roof2=roof2-next;
}
roof1=roof1-next;
}

}
/*******************************************************************************
* function show() : 현재 linked list 내 단어들을 순서대로 출력하는 함수 *
* *
*******************************************************************************/
void show()//외부 변수로 만들어진 링크드리스트를 출력합니다.
{
struct list *roof=head-next;
while(roof != null)
{
printf(\t %s\n,roof-word);
roof=roof-next;
}
printf(\n);
}

정말 최대한 보기 쉽도록 편집했습니다.ㅠㅠ
도움 부탁드리겠습니다.!!!!!

신청하기





COMMENT

댓글을 입력해주세요. 비속어와 욕설은 삼가해주세요.

  • 유1혹

    네 그러겠습니다.ㅠ 감사합니다...

  • 푸른잎

    링크드리스트의 기본 구조를 다시 한번 복습하시길 권해 드립니다.

번호 제 목 글쓴이 날짜
2698120 -연산자 가 먼지 좀 알려주세요 (1) 낮선검객 2025-06-14
2698091 길찾기문제 질문이요! 노을빛 2025-06-13
2698060 while 문에 대한 질문입니다. (9) 물고기자리 2025-06-13
2698012 2~9가아닌수 아놀드 2025-06-13
2697980 for에 gets함수를 넣으니까 왜 반복이 안되죠 ㅜ (2) 펴라 2025-06-12
2697952 2차배열과 함수문의^^; VanilLa 2025-06-12
2697924 다차원 배열 질문있습니다 두동 2025-06-12
2697893 정올 :: 기초다지기 a9007 배열7 (문제가 이상함 -_-) 흰두루 2025-06-12
2697862 Unable......... 지정된 파일을 찾을 수 없습니다!! (1) Creator 2025-06-11
2697761 그러니까여제말은... (2) 새론 2025-06-10
2697737 정올 문제좀 풀어보신분~ 레오 2025-06-10
2697709 rand함수 질문좀요! (6) 가막새 2025-06-10
2697683 C언어 변수뒤 표시가 이해안되는게 있습니다. 소미 2025-06-10
2697660 껍데기딜 만들고 난후 어느핫키 누르면 코드검색이라도 뜨고 그다음 무반응 해결좀 (2) 움찬 2025-06-09
2697634 c언어로 감성사전 만들기! (1) 도란도란 2025-06-09
2697605 이 함수좀... agine 2025-06-09
2697574 배열 기본적인질문 (3) 민트향 2025-06-09
2697549 배열 초기화 (4) 나리 2025-06-08
2697465 수다님...^^ (2) 가론 2025-06-08
2697432 서버 만드는 함수에서 궁금한게있어요~ 파랑 2025-06-07
<<  이전  1 2 3 4 5 6 7 8 9 10  다음  >>

수다닷컴 | 여러분과 함께하는 수다토크 커뮤니티 수다닷컴에 오신것을 환영합니다.
사업자등록번호 : 117-07-92748 상호 : 진달래여행사 대표자 : 명현재 서울시 강서구 방화동 890번지 푸르지오 107동 306호
copyright 2011 게시글 삭제 및 기타 문의 : clairacademy@naver.com