비어있는 경우 노드를 추가하는 코드를 작성했습니다. 내 코드와 논리가 정확하다고 생각하지만 여전히 답을 얻을 수 없습니다. 그것의 컴파일하지만 결과가 표시되지 않고 실행 후.연결된 목록에 노드가 추가되지 않았습니다.
#include<stdio.h>
#include<stdlib.h>
struct node
{
int data;
struct node *nxt;
};
void append(struct node *,int);
void display(struct node*);
void append(struct node *q, int num)
{
struct node *temp,*r;
if(q == NULL)
{
temp = (struct node*)malloc(sizeof(struct node));
temp -> data = num;
temp -> nxt = NULL;
q = temp;
}
else
{
temp = q;
while(temp->nxt != NULL)
{
temp = temp->nxt;
}
r = (struct node*)malloc(sizeof(struct node));
r -> data = num;
r -> nxt = NULL;
temp->nxt = r;
}
}
void display(struct node *q)
{
while(q != NULL)
{
printf("%d",q->data);
q = q->nxt;
}
}
int main()
{
struct node *a;
a= NULL;
append(a,10);
append(a,11);
append(a,12);
display(a);
return 0;
}
처리 한 대부분의 시스템에서 새 행은 데이터를 플러시 할 필요가 없습니다. 그러나, OP가 개행 문자 (또는 적어도 함수 끝에서 개행 문자가있는 값 사이의 공백)를 원한다는 것이 맞습니다. –
@Mark Wilkins, 당신이 말했듯이, OP는 출력물이 뷰어에게 명확하게 보이도록 개행을 필요로합니다. 그러나 프로그래밍을 처음 접했을 때 나는이 문제를 오래 전에 보았습니다.하지만 지금은 터미널을 기억하지 못합니다. 또한 참조 용 : http://stackoverflow.com/questions/1716296/why-does-printf-not-flush-after-the-call-unless-a-newline-is-in-the-format-strin – Jay
끝까지 탐색 할 이중 포인터가 있으면 if/else는 필요하지 않습니다. (; q = & (* q) -> nxt) {;}에 대해 void append (struct node ** q, int num) { (* q) -> data = num; (* q) -> nxt = NULL; } ' – wildplasser