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

标签 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;

    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;
}

最佳答案

您的代码中有一个无限循环。

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 的返回值: Here's why (点击)

关于C从文件中读取链表并写入另一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41202221/

相关文章:

操作数后应有逗号、冒号、修饰符或行尾

android - 使用 FFMPEG 调整视频帧大小

Java删除节点链表不起作用

c++ - 我的链表反转递归方法代码有什么问题?

java - 链表addLast方法

c - 将另一个用户ID设置为当前进程

c++ - 压缩嵌套循环

java - 如何在java中创建没有扩展名的文件

c# - 不断将数据写入文件

java - 丰富的文件系统