私の目標は、動的配列を使用してファイルからテキストを読み取り、引数「numline」を使用して必要な行を最後に出力することです。この仕事には、循環型の単一リンクリストを使用する必要があります。関数を実行すると、最初の行Xnumlineのみが取得されます。混乱していますが、ノードパーティションを追加したり、パーティションをトラバースして印刷したりして、何か問題がありましたか?
EDiT:ファイルを編集しました...
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);
}
}