|
일단 다는 말씀 드리지 않더라도 님의 코드 중 앞에 ### 표시된 곳이 이상합니다.
그리고 님의 코딩 스타일은 좀 어색합니다.
if (cnt == 1)
else
이 곳처럼 동일한 역할을 하는 코드 블럭을 이중으로 만들면 안 됩니다.
될 수 있으면 이런 곳을 최대한 줄여나가는 알고리즘을 생각해야 합니다.
한 편 printf문에서 포인터 값(번지)을 출력할 때는 형식지정자 %p를 사용합니다.
마지막으로, 님의 코딩 내용을 최대한 존중해서 만들어본 코드입니다.
#include <conio.h>
#include <alloc.h>
typedef struct record {
char num;
struct record *next;
} lpnum;
void main()
{
lpnum *head, *node, *tmpNode, **ppNode;
char ch=0;
clrscr();
printf("\nhead address 0x%p \n", head);
head = NULL;
ppNode = &head;
while(1)
{
printf("\nPlease insert a number(0-9): ");
if((ch=getche())=='\r') break;
*ppNode = (lpnum *)malloc(sizeof(lpnum));
node = *ppNode;
node->num = ch;
node->next=NULL;
ppNode=&node->next;
printf("\nCurrent input is %c\n", node->num);
}
printf("\n Numbers are : \n");
node=head;
while(node)
{
printf(" %c(0x%p) \n", node->num, node);
tmpNode = node->next;
free(node);
node = tmpNode;
}
head=NULL;
printf("\n\nGood Bye\n\n");
while(kbhit()) getch(); getch();
}
걸리버 님이 쓰신 글 :
: linked list에 대한 질문입니다.
: 포인터 선언은 제대로 한 것 같은데 메모리 할당이 제대로 않됬는지
: 아니면 출력시 잘 못 불렀는지 계속 이상한 문자만 출력이 되네요.
: 고수님의 의견을 듣고 싶습니다. solution과 함께...
:
:
: #include <stdio.h>
:
: typedef struct record {
: char num;
: struct record *next;
: } lpnum;
:
: void main()
: {
: lpnum *link, *head, *temp;
:### double *addr;
:
: int cnt = 1;
: char ch;
: clrscr();
:
: head = (lpnum *)malloc(sizeof(lpnum));
: printf("\nhead address %d \n", head);
:
: while (ch != '\r')
: {
:### printf("\nPlease insert any number(0-9): %s");
: ch = getche();
:
: if (cnt == 1)
: {
: head->num = ch;
: temp = (lpnum *)malloc(sizeof(lpnum));
: link = temp;
: head->next = temp;
: printf("\nThe next points to %d ", head->next);
: cnt = 10;
: }
: else
: {
: link->num = ch;
: temp = (lpnum *)malloc(sizeof(lpnum));
: link->next = temp;
: link = temp;
: printf("\nCurrent input is %c\n", link->num);
: printf("\nThe next points to %d\n", link->next);
: }
:### if (ch == '\r') head->next = '\0';
: }
:
:### head = addr;
: printf("\n Numbers are : ");
: while (head->num != '\r')
: {
: printf(" %c(%d) \n", head->num, head);
: head = head->next;
: printf(" Numbers are : ");
: }
: printf("\n\nGood Bye\n\n");
: free(head);
:### free(link);
:### free(temp);
: }
:
:
:
:
|