단순 연결 리스트가 오류가 납니다.
글쓴이: 익명 사용자 / 작성시간: 화, 2019/06/18 - 1:33오전
연결 리스트를 공부하는 중인데 딱히 틀린게 느껴지지 않는데 번호와 name을 입력 받고나면 while문이 돌지 않고 실행이 종료 됩니다. 무엇이 문제인가요?
#include <stdio.h> #include <string.h> #include <malloc.h> struct nodeType { int num; char* name; nodeType* pre; }; int main(){ int num; char* name; nodeType* newnode; nodeType* head; nodeType* cur; nodeType* prenode; head=NULL; printf("노드구조의 번호:"); scanf("%d",&num); while(num!=0){ printf("\n이름: "); scanf("%s",name); newnode=(nodeType*)malloc(sizeof(nodeType*)); newnode->num=num; newnode->name=name; newnode->pre=NULL; if(head==NULL){ head=newnode; } else{ cur=head; while(cur!=NULL){ prenode=cur; cur=cur->pre; } prenode->pre=newnode; } printf("success"); } }
그리고 while문이 끝나면 모든 노드를 출력하고 싶은데 어떻게 코딩을 해야할까요...
Forums:
코드를 잘못 복붙 했습니당
이게 진짜 코드 입니다.
회원가입부터...
kldp 회원 로그인해서 글 쓰면 좋은 점. 내가 쓴 글은 내가 고칠 수 있다.
아래 코드에서 또 틀린 점은 없나요? 저는 그냥 복붙만 하고 코드 태그에 language=c 한 거라..
num!=0 인 동안 while 문이 돌기를 바라는 거죠?
그 바로 전에 num 값을 찍어보셔요.
세벌 https://sebuls.blogspot.kr/
늘 비슷비슷한 질문이 올라오는군요. 머지않아 어지간한
늘 비슷비슷한 질문이 올라오는군요. 머지않아 어지간한 질문은 링크만으로 답할 수 있겠어요.
>>> 코드 여러 군데에서 문제가 보입니다만, "딱히 틀린게 느껴지지 않는데" 부분이 가장 심각하군요.
누구나 실수는 할 수 있는 거지만, 자기 코드가 무슨 일을 하고 있는지 스스로 읽지 못하고 있다면 조금 문제가 있다고 봐야 합니다.
코드의 main 함수에서 변수 name이 언급되는 곳을 처음부터 검색해 볼까요?
char* name; // (초기화 안 됨)
scanf("%s",name); // 초기화 안 된 포인터 name이 가리키는 곳으로 입력을 받다니?
누울 자리를 보고 다리를 뻗으라 하였습니다. 문자열을 입력받으려면 문자열 입력을 받을 자리를 미리 마련해야지요.
char * 타입 포인터를 만드는 것으로는 충분치 않습니다. 지역변수로든 동적 할당으로든 문자 배열이 있어야 합니다.
최근에 비슷한 종류의 실수를 하신 분이 있는데 참고해 보시고요: https://kldp.org/node/161753
그 밖에도 아래 코드 라인에도 문제가 있으니 다시 잘 읽고 생각해보시기 바랍니다. 이것도 초보자들이 많이 저지르는 실수인데, 개인적으로 이 실수를 막기 위해서라도 C++의
new
문법이 더 좋은 것 같습니다.newnode=(nodeType*)malloc(sizeof(nodeType*));
맞춤형 코드 주문인가요? 얼마까지 알아보고 오셨나요?
예시를 보고 싶으시거나 직접 공부해서 해 보고 싶으시면 linked list traversal로 검색하면 많이 나올겁니다.
댓글 달기