내 목표는 동적 배열이있는 파일의 텍스트를 읽고 "numline"인수가있는 행을 원하는대로 마지막으로 인쇄합니다. 나는이 작업을 위해 순환으로 연결된 링크 된 목록을 사용해야한다. 함수를 실행할 때 첫 줄 X numline 만 얻습니다. 나는 혼란 스럽다. 노드 파티션을 추가하거나 트래버스 및 프린트 아웃 (printout) 파티션을 추가 할 때 잘못했다.순환 링크 된 목록에 노드를 추가하려면 어떻게합니까?
편집 : 나는
void last(char* numline,char* fileptr)
{
struct node *start,*newnode,*lastnode;
struct node *ptr=start;
char *linebuffer;
int maxlinelen=512;
int i=0;
int j;
FILE *fp;
linebuffer=(char*)malloc(maxlinelen * sizeof(char*));
if(linebuffer==NULL)
{
fprintf(stderr,"Command: last:Memory allocating failed for linebuffer\n");
exit(1);
}
if((fp=fopen(fileptr,"r"))!=NULL)
{
start=NULL;
while((fgets(linebuffer,maxlinelen,fp))!=NULL)
{
while(strlen(linebuffer)==maxlinelen-1)
{
maxlinelen*=2;
linebuffer=realloc(linebuffer,maxlinelen * sizeof(char));
if(linebuffer==NULL)
{
fprintf(stderr,"Command: last: Memory reallocating failed for linebuffer\n");
exit(1);
}
fgets(linebuffer+(maxlinelen/2-1),(maxlinelen/2)+1,fp);
}
if(start==NULL)
{
newnode=(struct node *)malloc(sizeof(struct node));
strcpy(newnode->data,linebuffer);
printf("linebuffer newnoda kopyalandi\n");
start=newnode;
newnode->next=newnode;
// start=newnode;
i++;
printf("ikinciburda");
}
else{
newnode=(struct node *)malloc(sizeof(struct node));
strcpy(newnode->data,linebuffer);
lastnode=start;
while(lastnode->next!=start)
{
lastnode=lastnode->next;
}
lastnode->next=newnode;
newnode->next=start;
i++;
}
}
printf("toplam line sayisi :%d\n",i);
ptr=start; //<----- i added this line
for(j=i-(atoi(numline));j<i;j++)
{
ptr=ptr->next;
}
while(ptr!=start)
{
printf("%s\n",ptr->data);
ptr=ptr->next;
}
fclose(fp);
}
}
+1.OP보다 더 읽기 쉬운 코드가 원형 목록의 "첫 번째"항목을 찾기위한 초기 for-loop입니까? 그냥 궁금해서,''ptr = start-> next;로 시작한다고 생각 하겠지만, start가 null이 아니라면 모든 항목을 명확하게 일주 할 것입니다. – WhozCraig
@viktor latypov 내 코드를 편집했습니다. 하지만 메신저 seg지고. 결점. 인스턴트 메신저 정말 순환 링크 된 목록을 혼동. 나는 이미 2를 편집했다. – ccc
@WhozCraig 플래그 출력물을 얻었지만 (j ...) loop seg fault에 도달했을 때 당신의 조언을 들었다. – ccc