링크드 리스트 잘못된 부분좀 알려주세요 . id순으로 삽입
마호
질문 제목 : 링크드 리스트 잘못된 부분좀 알려주세요 . id순으로 삽입질문 요약 :이상하게 학번 4-3-2-1- 입력하면 1-2-3-4로 출력됩니다.
1-2를 입력하면 세그멘테이션 오류납니다.
4 2 1 5를 입력하면 1-2-5-4로 출력됩니다...오류부분을 잘 모르겟네요..ㅠㅠ질문 내용 : #include stdio.h
#include stdlib.h
#include string.h
//void newclient(void);//함수 선언
typedef struct userdata{
int id;
char pwd[11];
char name[11];
char addr[11];
char phone[11];
struct userdata *next;
}userdata;
void newclient(userdata **phead) //회원가입 함수
{
userdata *tmp; //입력되는 노드를 가리키는 포인터 변수
tmp=(userdata *)malloc(sizeof(userdata)); //tmp_input 구조체 동적할당
userdata *tmphead=*phead;
puts(학번, 비밀번호, 이름 , 주소, 전화번호를 입력하시오);
printf(학번:);
scanf(%d,&tmp-id);
printf(비밀번호:);
scanf(%s,&tmp-pwd);
printf(이름:);
scanf(%s,&tmp-name);
printf(주소:);
scanf(%s[ /n],&tmp-addr);
fflush(stdin); //입력 버퍼 지운다 왜냐면 주소에 띄어쓰기 들어갈수도 있으니
printf(전화번호:);
scanf(%s,&tmp-phone);
tmp-next = null; // 현재 생성된 노드가 마지막
if(*phead == null){
*phead = tmp;
}else{
if((*phead)-id tmp-id){
tmp-next=*phead;
*phead=tmp;
puts(입력값이 작을때성공);
}
else
{ if(tmp-id (*phead)-next-id){
tmphead=(*phead)-next;
tmp-next=(*phead)-next;
(*phead)-next=tmp;
puts(입력값이 첫노드보다 크고 다음 노드보다 작을때성공); }
else if(tmp-id == (*phead)-next-id)
puts(중복된 학번입니다.);
else if(tmp-id (*phead)-next-id)
{
while(tmphead-next==null){
puts(입력값이 첫노드보다 크고 다음노드보다 클때 노드이동필요해서이제작업준비중);
tmphead=tmphead-next;
puts(ㅁㅁ);
if(tmp-id tmphead-next-id){
tmp-next=tmphead-next;
tmphead-next=tmp;
puts(입력값이 다음노드보다 클때 입력 성공);
break;
}
tmphead-next=tmp;
//tmp의 입력값이 저장할 노드까지 계속 tmphead이동
//치 잡으면 대입 시작
}
}
}
}
}
void printinfo(userdata** phead)
{
userdata *tmp; //입력되는 韜쨉풔?노드를 가리키는 포인터 변수
tmp=*phead;
while(tmp!=null){
printf(%d \n,tmp-id);
tmp=tmp-next;
}
}
int main(void)
{
userdata *head; //첫번째 노드를 가리키는 포인터 변수
userdata *last; //마지막 노드를 가리키는 포인터 변수
userdata *tmp; //입력되는 노드를 가리키는 포인터 변수
head=null;
last=null;
puts(메인화면);
newclient(&head);
printinfo(&head);
newclient(&head);
printinfo(&head);
newclient(&head);
printinfo(&head);
newclient(&head);
printinfo(&head);
}