C 从文件中读取链表并写入另一个文件

C 从文件中读取链表并写入另一个文件,c,file,linked-list,C,File,Linked List,我正在尝试制作一个程序,可以读取一个链表,并输出它所读取的所有信息。我的问题是我不能简单地输出。有一些问题我找不到 #include <stdio.h> #include <stdlib.h> struct sarasas { char *reiksme; struct sarasas *kitas; }; int main() { struct sarasas *sarasasPtr, *pradz, *pab, *elem;

我正在尝试制作一个程序,可以读取一个链表,并输出它所读取的所有信息。我的问题是我不能简单地输出。有一些问题我找不到

#include <stdio.h>
#include <stdlib.h>


struct sarasas
{
    char *reiksme;
    struct sarasas *kitas;
};



int main()
{
    struct sarasas *sarasasPtr, *pradz, *pab, *elem;

    pradz = NULL;
    pab = NULL;

    FILE *duomPtr;
    printf("Iveskite duomenu failo pavadinima: ");
    char failas[255];
    scanf("%s", failas);
    duomPtr = fopen(failas, "r");

    if(duomPtr == NULL)
    {
        printf("Toks duomenu failas neegzistuoja \n");
        exit(0);
    }

    int k = 0;
    char paimtaReiksme[255];

    while(fscanf(duomPtr, "%s", paimtaReiksme) != EOF)
    {
        if(k == 0)
        {
            sarasasPtr = (struct sarasas*)malloc (sizeof (struct sarasas));
            sarasasPtr->reiksme = paimtaReiksme;
            sarasasPtr->kitas = NULL;
            pradz = sarasasPtr;
            pab = sarasasPtr;
        }

        else
        {
            sarasasPtr = (struct sarasas*)malloc (sizeof (struct sarasas));
            sarasasPtr->reiksme = paimtaReiksme;
            sarasasPtr->kitas = NULL;
            pab->kitas = sarasasPtr;
            pab = sarasasPtr;
        }
        k++;
    }

    if(pradz == NULL &&  pab == NULL)
    {
        printf("Tuscia\n");
        exit(0);
    }

    FILE *rptr;
    printf("Iveskite rezultatu failo pavadinima: ");
    char failas2[255];
    scanf("%s", failas2);
    rptr = fopen(failas2, "w");

    while(sarasasPtr->kitas != NULL)
    {
        fprintf(rptr, "%s", sarasasPtr->reiksme);
    }


    return 0;
}
#包括
#包括
萨拉萨斯结构
{
char*reiksme;
结构sarasas*kitas;
};
int main()
{
结构sarasas*Sarasaptr,*pradz,*pab,*elem;
pradz=NULL;
pab=NULL;
文件*duomPtr;
printf(“Iveskite duomenu failo pavadinima:”);
字符failas[255];
scanf(“%s”,failas);
duomPtr=fopen(failas,“r”);
if(duomPtr==NULL)
{
printf(“Toks duomenu failas neegzistouoja\n”);
出口(0);
}
int k=0;
char paimtaReiksme[255];
while(fscanf(duomPtr,“%s”,paimtaReiksme)!=EOF)
{
如果(k==0)
{
sarasaptr=(结构sarasas*)malloc(sizeof(结构sarasas));
sarasaptr->reiksme=paimtaReiksme;
sarasaptr->kitas=NULL;
pradz=Sarasaptr;
pab=Sarasaptr;
}
其他的
{
sarasaptr=(结构sarasas*)malloc(sizeof(结构sarasas));
sarasaptr->reiksme=paimtaReiksme;
sarasaptr->kitas=NULL;
pab->kitas=Sarasaptr;
pab=Sarasaptr;
}
k++;
}
if(pradz==NULL&&pab==NULL)
{
printf(“Tuscia\n”);
出口(0);
}
文件*rptr;
printf(“Iveskite rezultatu failo pavadinima:”);
字符failas2[255];
scanf(“%s”,failas2);
rptr=fopen(failas2,“w”);
while(sarasaptr->kitas!=NULL)
{
fprintf(rptr,“%s”,sarasaptr->reiksme);
}
返回0;
}

代码中有一个无限循环

while(sarasasPtr->kitas != NULL)
{
    fprintf(rptr, "%s", sarasasPtr->reiksme);
}
在上面的
while
循环中,您试图一次又一次地打印同一个元素,因此最终进入无限循环。相反,您必须在每次迭代后更改指向下一个元素的指针。您可以尝试以下方法:

while(sarasasPtr != NULL) //check whether pointer points to NULL
{
    fprintf(rptr, "%s", sarasasPtr->reiksme);
    sarasasPtr = sarasasPtr->kitas; //make pointer point to next element
}

此外,您不需要强制转换malloc的返回值:
malloc
(单击)

您到底遇到了什么问题?问题已经解决了。结果证明循环并没有结束@Mhd.TahawiI发现该程序只在文件中打印一个字。也许你知道为什么会这样@基路伯?这是最后一个被印出来的字吗。问题是您试图将相同的
char数组[]
paimtaReiksme
一次又一次指向
sarasaptr->reiksme
。尝试使用
strcpy()
function1:include
string.h
头文件| 2:use
strcpy(sarasaptr->reiksme,paimtaReiksme)而不是
sarasaptr->reiksme=paimtaReiksme任何地方,在使用strcpy之前,不要忘记为'sarasPtr->reiksme'分配内存
saradPtr->reiksme=malloc(strlen(paimtaReiksme))
@阿多马斯阿拉贝拉